我的服务端之有限制使用Thread

前言:多线程是一把双刃剑,不要盲目使用多线程!
使用多线程的优点:
1、支持并发。
2、提高程序执行效率,这里又可以分为两种情况:
单线程情况下,I/O操作会让CPU处于"等待"状态,因此多线程能更好利用CPU;
多核CPU的出现,让多线程程序有更好的执行效率。

缺点:
1、造成一定的线程切换开销。
2、资源容易出现竞争,甚至死锁。
3、多个线程"同时"对某块内存进行读写,容易造成数据错乱。
4、使用多线程增加了程序的复杂度,使程序更容易出错。
5、过多的线程会造成程序效率大幅下降。

注:在游戏服务端要求这么高的健壮性和安全性前提下,上述缺点都是致命的。

但是在我的服务端中如何有限制的使用多线程呢?
答案就是:使用消息队列。

消息队列,是基于生产者与消费者模型实现的一种数据结构。

在消息队列中,实现两个方法,一个是push,一个是pop。怎么加锁,如何加锁,会在消息队列里实现。外部不需要关心,只需要像调用其它数据结构一样调用它。因此能将多线程带来的复杂度大幅度降低。

在我的服务端中,多线程一般用于使用地方呢?
我更倾向于在I/O方面使用多线程(例如:网络通信、写日志甚至是读写数据库),
因为这样既能提高效率,更安全,而且没有增加太大的复杂度。

如果你有更好的多线程使用方法(主要是不要增加太大复杂度),
或者上述有什么错误的地方,您都可以与我讨论交流。

猜你喜欢

转载自blog.csdn.net/a374826954/article/details/18963259
今日推荐