楼主本来是要继续写服务器并发的,但是后续的服务器相关点都和进程线程联系在一起,所以先把进程线程相关内容写完吧! 这次只写进程线程的概述,实际操作后续博文逐一代码实现。
进程同步or进程通信/线程同步or线程通信? 这两组概念迷惑我至今,网上和书籍对这个的描述也是爱用啥用啥的感觉,今天又重新理了一遍。
什么是同步:同步就是数据保持一致,无论是进程还是线程,都是实现了代码执行流程的分支,多个分支同时进行。多个分支互不干扰,但是又有些数据需要共享,让这些数据对所有分支保持一致即为同步。 什么是通信:通信就是数据传输,数据存在两块不同的内存区域。通过某种方式互相传递。 但是在进程线程中,比如面试官问你进程同步有那些方式,管道算是同步还是通信?干脆也懒得区分,还是按传统习惯,同步,通信一并处理吧,理解成同一个玩意。
进程: linix一个程序就是一个进程,想产生新的进程只有唯一的一个方法:fork(),这里不讨论开启或调用其他程序场景。 进程完全拷贝资源,两个进程完全独立,从fork()那段代码开始,复制执行完毕的代码内存,然后分道扬镳各自独立执行,进程的数据不是共享的,同一变量占用的内存地址不一样。 虽然完全一致,还是有父子区别的,fork()返回两次,返回值为0的是子进程,返回子进程pid的是父进程。 使用进程要注意什么:
进程同步方式:
线程: linux线程直到1996年才出现,Linux线程分LinuxThread和NPTL两个版本,可使用getconf GNU_LIBPTHREAD_VERSION 查看。 前者实际上是进程的衍生版的轻量级进程,效率较低,占用资源多,现在已经被抛弃的差不多了。后者是真正意义上的线程,不会产生进程。 线程里数据是共享的,即同一变量占用同一个内存地址,所以用全局变量就可以轻松实现数据交流。 使用线程要注意什么:
线程同步方式:
至此,总结了进程和线程使用时要注意的地方和较为齐全的各自的同步方式。面试官的最爱内容,后续博文将用代码逐一实现他们!
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/1892.html