多进程多线程和相关同步机制
Posted demonmaster
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多进程多线程和相关同步机制相关的知识,希望对你有一定的参考价值。
多进程和多线程原理
fork后子进程会复制父进程的task_struct结构,并为子进程的堆栈分配物理页。理论上来说,子进程应该完整的复制父进程的堆栈以及数据空间,但是2者共享正文段。
由于一般fork后面都结着exec,所以现在的fork都在用写时复制的技术,顾明思议,就是数据段,堆栈一开始并不复制,由父子进程共享,并将这些内存设置为只读。
直到父子进程一方尝试写这些区域,则内核才为需要修改的那片内存拷贝副本。这样做可以提高fork的效率。
从内核的观点看,进程的目的就是担当分配系统资源的的基本单位。线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
线程它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需要的时间也远远小于
进程间切换所需要的时间。据统计,总的来说,一个进程的开销大约是一个线程开销的30倍左右,当然,在具体的系统上,这个数据可能会有较大的区别。
通讯方式
进程间传递数据只能通过通讯的方式,既费时又不方便。线程数据大部分共享(线程函数内部不共享)快捷方便。但是数据同步需要加锁,static变量尤其注意
线程的创建使用和消除
创建:temp = pthread_create(&thread[0], NULL, thread1, NULL)
成功返回 0
注销:pthread_exit(NULL);
等待线程结束:pthread_join(thread[0],NULL);
以上是关于多进程多线程和相关同步机制的主要内容,如果未能解决你的问题,请参考以下文章
java面试必问:多线程的实现和同步机制,一文帮你搞定多线程编程