什么是线程
一件工作可以分成好几条线,在同一个工作间里同时推进。这些线就是线程。
一个人,好几只手
一位厨师在厨房里干活:一边煮汤,一边切菜,时不时还看看火。
活儿只有做菜这一件,却在里面同时照应好几条线。厨房只有一个,调料柜也只有一个,大家一起用。
电脑也能在一件工作里像这样分成好几条线来干,每一条线都叫线程。
把活儿分成几条线,等汤煮开的时候手也不闲着,可以去照应别的线。
工作一件,里面的线好几条。工作间和材料一起用。
线程,就是在一件工作里同时推进的好几条线。
互不相干的两户,一户里的好几间房
前面说过,进程各有各的空间。两个进程就像隔着墙的邻居,不能随便进对方家门。
可同一个进程里的线程,像住在一套房子里的一家人。房间分开,客厅和冰箱却是共用的。
所以线程之间交换信息很方便,因为看的是同一个调料柜。进程之间做这件事就麻烦得多。
墙看起来只是添麻烦,可邻居家漏水时,它也是护着自家不被泡湿的那道好墙。
进程是隔墙的邻居,线程是一套房里的一家人。
进程各用各的空间,同一个进程里的线程共用空间。
多加几条线看看
亲手改一改,把一件工作分成几条线。
只有一条线时,活儿按顺序一样一样地做。线加多了,大家看着同一个调料柜,好几部分同时推进。
线多了,活儿能早点干完。不过大家都用同一个厨房,太多了就会互相挡路。
线加倍,活儿却不会正好快一倍,因为在窄小的厨房里互相让路的时间变多了。
改一改线的条数,看看一件工作是怎么分开推进的。
线多了,同时推进的部分就多,但共用同一个空间这一点不变。
共用很快,但是
线程共用调料柜是一大长处。不用另外搬、另外抄,直接看同一份东西,又轻又快。
可凡事有两面。两条线在同一刻碰同一样材料,就可能撞车,好比一边在放盐,另一边也放了一遍。
所以共用虽方便,但谁在什么时候碰,需要小心一点。这个话题,稍后在竞争条件那一课里接着讲。
即便如此还选择共用,是因为给每条线各复制一份调料柜,反而更重、更慢。
共用又轻又快,可同时碰同一样东西就会撞车。
共用空间又快又轻,但同时碰同一样东西就可能出问题。
用一张纸总结
只要记住三点。
第一,线程是一件工作里的好几条线。活儿只有一件,里面的好几部分却同时推进。
第二,它们共用同一个空间。进程之间隔着墙,同一个进程里的线程却看着同一个调料柜。第三,所以又轻又快,但也得小心,因为同时碰同一样东西就可能撞车。
懂了这三点,就能明白为什么有的应用一条线负责让画面动起来,另一条线在后台默默干活,所以一直有反应、不卡住。
一件工作里的好几条线,共用空间,轻快但要小心。