一个程序,为提高效率,或将各种处理进行隔绝,就可以使用多线程。比如这个线程处理问题A,那个线程处理问题B。线程是进程内部的执行单元,共享进程的资源。理论上,有多少个CPU,或者有多少个CPU内核,就可以开辟多少个线程。单线程的话,发挥不出多CPU的优势。
多线程最大的问题,是如何解决资源的争用问题。
线程休眠。将线程挂起,不再参与CPU的争夺。在C#中,线程挂起(休眠)可用这个语句:
//所在线程休眠 1 分钟
Thread.Sleep(60 * 1000);
1分钟之后呢?是不是马上执行呢?不是的,该语句只代表这个线程在1分钟后被唤醒,参与CPU使用权的争夺。至于能不能立刻抢到,要看它的造化。
线程优先级
线程优先级高,代表容易抢到CPU;但优先级低的,也不是说老是被抢。一个线程,总是被抢,那么等待的时间就越长,然后它的优先级会越来越高,最终还是会抢到CPU,服务完了再重置。这是哲学家与筷子问题?操作系统的工作范围。
线程数
线程数与硬件环境,特别是CPU的数量有关。也与软件性质有关。比如说,该线程耗费IO比较多,那么线程数量就可以设置多一点,因为线程忙着IO的情况比较多,CPU耗费少;如果主要是消耗CPU,那么将线程数设置为CPU数量,或者CPU数 * 2就可以了。
网上有人说与CPU数量无关,我靠,你有8块CPU,却只设置了一两个线程,那永远都会有CPU在空闲啊,这不是浪费吗。
总之要大于CPU数量。