多进程多线程和相关同步机制

多进程和多线程原理

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);

猜你喜欢

转载自www.cnblogs.com/DemonMaster/p/12182218.html