多線程開發(fā)用了很久,但是一直沒去深入了解。長久以來一直有一些迷惑。直到深入了解后,才發(fā)現(xiàn)了以前的理解有不少錯誤的地方。

單線程等于同步,多線程等于異步

  • 這種理解很直觀,畢竟只有一個線程怎么異步?

Node.js表示不服,我就是單線程,我也能異步。談一談Node中的異步和單線程。
看完這篇文章我明白了單線程也能異步,把IO等耗時的操作比作燒水,我可以在這個時候切菜,這就是異步啊。
等等,似乎有點不對,那io又誰來開啟,又誰來通知cpu我已經(jīng)結(jié)束了呢?
Node.js異步IO的實現(xiàn),這篇文章解決了我的疑惑。

  • Node.js里面只有自己寫的代碼是跑在主線程上,但是內(nèi)部并不是單線程的,由C編寫的底層開啟了線程做IO操作。

恍然大悟,我現(xiàn)在的理解就是,會有一個可運行的線程池在等待cpu的使用權(quán)。類似IO,網(wǎng)絡(luò)請求這種耗時干等的操作,線程會放到需要等待的線程池中(阻塞),不會獲取cpu的使用權(quán),直到操作完成

這個理解了,并發(fā)和并行就很容易了。