实现Shell“多线程”
前言
Shell一行行地执行实在是太影响效率.本文将带你提升你的Shell执行效率,采用伪”多线程”的方式启动多个后端进程,最大程度利用cpu性能.
本文代码关键点有一定的注释,方便读者理解并灵活使用.本文示例及部分内容摘录自互联网,由本人整理成以下内容.遵守CC BY-NC-SA 4.0协议.
先问你一个问题.
多线程有什么用?
这里引用知乎pansz用户的回答
- 单进程单线程:一个人在一个桌子上吃菜
 - 单进程多线程:多个人在同一个桌子上一起吃菜
 - 多进程单线程:多个人每个人在自己的桌子上吃菜
 
多线程的问题是多个人同时吃一道菜的时候容易发生争抢
例如两个人同时夹一个菜,一个人刚伸出筷子,结果伸到的时候已经被夹走菜了…
此时就必须等一个人夹一口之后,在还给另外一个人夹菜,也就是说资源共享就会发生冲突争抢。
对于 Windows 系统来说,【开桌子】的开销很大,因此 Windows 鼓励大家在一个桌子上吃菜。因此 Windows 多线程学习重点是要大量面对资源争抢与同步方面的问题。
对于 Linux 系统来说,【开桌子】的开销很小,因此 Linux 鼓励大家尽量每个人都开自己的桌子吃菜。这带来新的问题是:坐在两张不同的桌子上,说话不方便。因此,Linux 下的学习重点大家要学习进程间通讯的方法。
开桌子的意思是指创建进程,开销这里主要指的是时间开销.
注意,线程和进程是不同的!
多线程就像火车的多个车厢,而进程则是火车。
在我们实现多线程之前,先了解2个概念.
有名管道FIFO和File Descriptor (FD) 
有名管道FIFO
管道文件有两种,一个是有名管道,一个是匿名管道。
“FIFO”则是有名管道(有名字的)。
它的特性是:如果一个进程打开FIFO文件进行写操作,而另一个进程对之进行读操作,数据就可以如同在shell或者其它地方常见的的匿名管道一样流线执行。
利用有名管道FIFO的上述特性就可以实现一个队列控制了。
**你可以这样想:一个女士公共厕所总共就10...
剩余内容已隐藏