Q
爲什麼需要線程
1
A
回答
6
「無處不在的線程」可能是一個不祥的跡象,可能是過去的無能,但人們在桌面應用程序中使用多線程的主要原因是允許長時間運行的事情發生,而不會凍結用戶界面應用程序。
傳統的Windows GUI應用程序有一個'主線程',它負責處理從操作系統接收到的消息。這些消息用於所有鼠標/鍵盤交互,因此當你停止處理它們時,應用程序停止響應(在幾秒鐘之後,Windows本身會灰掉應用程序,並在標題欄中放置「停止響應」。 )
爲了避免這種醜陋,人們將需要很長時間的活動(要麼是因爲需要大量的CPU,要麼是因爲可能正在等待I/O(磁盤,網絡等))移動到其他線程上。這意味着主線程可以自由地保持泵送信息。
您不明確啓動主線程 - Windows在應用程序啓動時將其提供給您。
您需要非常小心後臺線程和主線程之間的交互 - 有一系列的規則和限制,如果不遵循這些規則和限制,會給您帶來一些問題,這些問題可能不會立即顯示,一致或在你的機器上。那並不意味着他們不在那裏......
+0
很好的答案,我認爲值得一提的是(或者詳細闡述)多線程可能帶來的問題,如果你不小心的話。也就是說,當多個線程共享一個公共資源時,會發生死鎖和競態條件。如果你有相互等待的線程來完成他們在一個公共資源上的工作,那麼你首先要打破線程的目的! :) – ryrich
相關問題
- 1. 爲什麼Netty需要線程池?
- 2. 爲什麼需要Java線程?
- 3. 一個線程需要2秒,10個線程需要16-18秒。爲什麼?
- 4. 爲什麼要使用線程時需要子進程
- 5. 什麼時候Windows線程需要消息循環,爲什麼?
- 6. 爲什麼我需要那條線? (C#)
- 7. 爲什麼需要這個斜線?
- 8. 爲什麼我們需要爲每個線程使用NSAutoreleasepool?
- 9. 爲什麼線程函數需要聲明爲'__cdecl'?
- 10. 爲什麼需要
- 11. 爲什麼需要「{} \」?
- 12. 爲什麼Sinatra請求需要EM線程?
- 13. 從線程提升python /導入模塊需要ReleaseLock()。爲什麼?
- 14. 爲什麼在主線程中需要運行駱駝示例
- 15. 爲什麼AIDL需要支持多線程?
- 16. 爲什麼我們真的需要多個netty boss線程?
- 17. 爲什麼我們需要在appendPixelBuffer之後暫停線程:withPresentationTime:?
- 18. 線程需要很長時間。爲什麼?
- 19. 爲什麼Android服務需要在UI線程上運行?
- 20. 爲什麼linux內核需要空閒線程?
- 21. 爲什麼在pthread中需要線程特定的數據?
- 22. 爲什麼我需要等待協程?
- 23. 爲什麼需要工作流程/ BPM?
- 24. 爲什麼Observable.FromEventPattern需要調度程序?
- 25. 爲什麼sensorManager.registerListener需要處理程序?
- 26. Android onPause:爲什麼要停止線程?
- 27. 什麼是線程本地存儲?我們爲什麼需要它?
- 28. 什麼是Python中的「線程本地存儲」,爲什麼我需要它?
- 29. 爲什麼需要copy_to/from_user?
- 30. 爲什麼Grails需要Xerces?
你有沒有任何「遍地?」的例子? –
你看過代碼,看看它在創建線程的位置和原因嗎? – JaredPar
當他們需要時,我在web應用程序中使用它們。 – StingyJack