孤儿进程、僵尸进程和守护进程

Posted by 夏泽民

孤儿进程指的是在其父进程执行完成或被终止 后仍继续运行的一类进程。



Mutex

Posted by 夏泽民

https://www.cl.cam.ac.uk/research/srg/netos/papers/2007-cpwl.pdf 1、概念         互斥锁(Mutex)是在原子操作API的基础上实现的信号量行为。互斥锁不能进行递归锁定或解锁,能用于交互上下文但是不能用于中断上下文,同一时间只能有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁。当无法获取锁时,线程进入睡眠等待状态。         互斥锁是信号量的特例。信号量的初始值表示有多少个任务可以同时访问共享资源,如果初始值为1,表示只有1个任务可以访问,信号量变成互斥锁(Mutex)。但是互斥锁和信号量又有所区别,互斥锁的加锁和解锁必须在同一线程里对应使用,所以互斥锁只能用于线程的互斥;信号量可以由一个线程释放,另一个线程得到,所以信号量可以用于线程的同步。     2、数据结构 struct mutex { /* 1: unlocked, 0: locked, negative: locked, possible waiters / atomic_t count; spinlock_t wait_lock; struct list_head wait_list; #if defined(CONFIG_DEBUG_MUTEXES) || defined(CONFIG_MUTEX_SPIN_ON_OWNER) struct task_struct *owner; #endif #ifdef CONFIG_MUTEX_SPIN_ON_OWNER struct optimistic_spin_queue osq; / Spinner MCS lock */ #endif #ifdef CONFIG_DEBUG_MUTEXES void *magic; #endif #ifdef CONFIG_DEBUG_LOCK_ALLOC struct lockdep_map dep_map; #endif };         结构体成员说明:         1、atomic_t count;         指示互斥锁的状态:1 没有上锁,可以获得;0 被锁定,不能获得。初始化为没有上锁。         2、spinlock_t wait_lock;         等待获取互斥锁中使用的自旋锁。在获取互斥锁的过程中,操作会在自旋锁的保护中进行。初始化为为锁定。         3、struct list_head wait_list;         等待互斥锁的进程队列。



Jaeger

Posted by 夏泽民

https://github.com/jaegertracing/jaeger https://www.jaegertracing.io/docs/1.14/getting-started/ https://github.com/jaegertracing/jaeger-client-go trace Micro通过Wrapper实现了三种trace接口,aswxray,opencensus,opentracing,这里主要关注opentracing,opentracing已成为行业标准。



GC

Posted by 夏泽民

https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md Go的垃圾回收官方形容为 非分代 非紧缩 写屏障 三色并发标记清理算法。 非分代:不像Java那样分为年轻代和年老代,自然也没有minor gc和maj o gc的区别。 非紧缩:在垃圾回收之后不会进行内存整理以清除内存碎片。 写屏障:在并发标记的过程中,如果应用程序(mutator)修改了对象图,就可能出现标记遗漏的可能,写屏障就是为了处理标记遗漏的问题。 三色:将GC中的对象按照搜索的情况分成三种:



Channel

Posted by 夏泽民

Channel 是 Go 语言的主要同步和通信原语,它们必须速度快且可扩展。



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required