多线程

一个程序,为提高效率,或将各种处理进行隔绝,就可以使用多线程。比如这个线程处理问题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数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值