由于最近再处理一些图像的算法中涉及到效率和速度问题,改进了半天发现貌似不好搞了。。于是空了的时候随便到处看看,发现了多线
程可能会有点作用。。以前虽然学习过,但基本都是书上的例子那种方式运行。。。MAIN THREAD RUN....SUBTHREAD RUN....交替的RUN,就根本没有真实的使用过,如是就在网上搜了些资料,以供自己随时学习记录。。
A、我首先得搞清楚多线程的作用和应用场合。
我只知道多线程其目的是提高CPU的利用率,但这句话就太大了。。不够通俗。。在网上找了一些人的见解,个人认为貌似是正确的:
有件事情需要不停地做的时候就用多线程,例如不停地检测串口是否收到东西;
1.你在什么情况下使用多线程,怎么利用多线程带来的优势
为防止计算量较大的程序运行时,界面停止响应,可以使用多线程。利用多线程平均分配CPU时间片的特性,可以实现多个任务同时进行。
2.你在使用多线程时都遇到什么问题,怎么解决
使用多线程可能遇到最普遍的问题,就是多线程运算、取值的时候,多个线程如果同时存取同一内存单元的内容,可能导致运行结果千差万别。解决的方法是使用多线程同步机制,建立临界区、设定互斥量,最终目的还是为了保持多个线程之间相互配合,相互等待,达到运行一致的效果。
1.通常在I/O处理的时候使用多线程,例如串口操作,读写文件,socket I/O等。
或者在需要在后台处理的事务。
2.同步问题是经常遇到的,关键还是在设计数据的时候要考虑到可能出现的同步问题,用同步对象来处理。
3.多线程调试问题,关键还是要分清处理哪个线程,通常使用线程的id来区分。
1.服务端响应多客户端的应用就应该使用多线程,这样可以提高响应的速度,充分利用资源
2.现成同步问题,调试问题,采用互锁,信号量解决之
3.调试麻烦
从线程A需要中止其他线程的时候,退出时资源清理很容易出问题。
采取的办法是,尽量不用terminatethread,使用setevent, postmessage等方法
通知要中止的线程自己exitthread.
对纯粹的cpu计算问题(单cpu)使用多线程反而会降低效率。
一般都是io方面使用多线程,
但是一个系统压力不大时使用多线程也是浪费,线程间切换也需要耗费计算能力的!
总之避免简单的事情复杂化!