这是我学习时一直想不通的问题。尽管很多书籍和视频都做了解释,但由于没有实际的案例和场景,导致我不能真正明白这个问题。接下来说下我的迷思,以及迷思的答案。
线程可以有效配合多核处理器,提高效率。这个是最广泛的说法,对于网络服务器,对于每个请求创建一个线程,可以CPU同时处理多个请求。我的疑问是,每来一个请求,就创建一个进程,多创建几个进程,也可以同时处理多个请求啊。网络请求大部分都是增删改查,从磁盘或者其他进程中获取数据,或处理后返回,或直接返回。为什么一定需要线程?
后面我看了一个例子,就清楚为什么进程里面一定要有线程,那就是文本编辑。
目前文本编辑(方便叙述,文本用txt代替)一般都需要三个线程
1)显示线程,读取内存中的txt,向用户展示当前内容。
2)操作线程,在用户输入指令后,做出的响应。如用户粘贴一行文本,本线程就需要将对应的文本加入到内存的txt中。
3)自动保存线程,定时把内存中的txt写入到磁盘中。
由于线程共享进程的内存,因此三个线程可以同时访问内存中的txt,完成自己的工作。
如果是三个进程,文本编辑就无法工作了,理由是每个进程有自己的内存空间,内存中有三份txt副本。这意味着操作进程执行时,需要同时修改另外两个进程的内存,这就需要额外访问操作系统。这并不是单纯的效率问题,相信有工作经验的小伙伴都知道,工作环节越多,工作时间就越无法估计,因为每个环节都有可能出问题。多了系统调用这一环,编程时考虑的事情就越多。线程就可以有效避免这个问题。
总结:多建线程来代替多建进程,屏蔽了系统调用,减少编程烦恼。