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