使用多線程就一定效率高嗎? 有時候使用多線程並不是為了提高效率,而是使得CPU能夠同時處理多個事件。
使用場景1
為什么了不阻塞主線程,啟動其他線程來做耗時的事情。
比如app開發中耗時的操作都不在UI主線程中做。
使用場景2
實現響應更快的應用程序, 即主線程專門監聽用戶請求,子線程用來處理用戶請求。以獲得大的吞吐量。
感覺這種情況下,多線程的效率未必高。 這種情況下的多線程是為了不必等待, 可以並行處理多條數據。
比如JavaWeb的就是主線程專門監聽用戶的HTTP請求,然后啟動子線程去處理用戶的HTTP請求。
使用場景3
某種優先級雖然很低的服務,但是卻要不定時去做。
比如Jvm的垃圾回收。
使用場景4
某種任務,雖然耗時,但是不耗CPU的操作時,開啟多個線程,效率會有顯著提高。
比如讀取文件,然后處理。 磁盤IO是個很耗費時間,但是不耗CPU計算的工作。 所以可以一個線程讀取數據,一個線程處理數據。肯定比
一個線程讀取數據,然后處理效率高。 因為兩個線程的時候充分利用了CPU等待磁盤IO的空閑時間。
曾幾何時想過使用多線程讀取磁盤數據, 但是讀取磁盤數據的性能瓶頸是IO,而不是CPU。 使用多線程的目的是為了不讓CPU閑下來,明顯不適合用於讀取磁盤數據。