专栏首页C++核心准则原文翻译C++核心准则CP.41:尽量回避线程的生成和销毁处理

C++核心准则CP.41:尽量回避线程的生成和销毁处理

CP.41: Minimize thread creation and destruction

CP.41:尽量回避线程的生成和销毁处理

Reason(原因)

Thread creation is expensive.

创建线程代价高昂。

Example(示例)

void worker(Message m)
{
    // process
}

void dispatcher(istream& is)
{
    for (Message m; is >> m; )
        run_list.push_back(new thread(worker, m));
}

This spawns a thread per message, and the run_list is presumably managed to destroy those tasks once they are finished.

Instead, we could have a set of pre-created worker threads processing the messages

代码中为每个消息生成一个线程,而且run_list很可能准备在任务结束时销毁它们。

作为改善,我们可以准备一组事先生成的工作线程来处理这些消息。

Sync_queue<Message> work;

void dispatcher(istream& is)
{
    for (Message m; is >> m; )
        work.put(m);
}

void worker()
{
    for (Message m; m = work.get(); ) {
        // process
    }
}

void workers()  // set up worker threads (specifically 4 worker threads)
{
    joining_thread w1 {worker};
    joining_thread w2 {worker};
    joining_thread w3 {worker};
    joining_thread w4 {worker};
}
Note(注意)

If your system has a good thread pool, use it. If your system has a good message queue, use it.

如果你的系统包含一个优秀的线程池,使用它。如果你的系统包含一个优秀的消息队列,使用它。

Enforcement(实施建议)

???

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#cp41-minimize-thread-creation-and-destruction

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则CP.26:不要分离线程

    Often, the need to outlive the scope of its creation is inherent in the threads ...

    面向对象思考
  • C++核心准则ES.34:不要定义C风格的可变参数函数

    Not type safe. Requires messy cast-and-macro-laden code to get working right.

    面向对象思考
  • C++核心准则:gsl::joining_thread好于std::thread

    A joining_thread is a thread that joins at the end of its scope. Detached thread...

    面向对象思考
  • 一日一技:在Python里面判断多个变量全部/任意不为空

    我们在写Python 函数的时候,可能会需要判断传入的多个参数是否同时为空/None/False,或者是否有任何一个不为空/None/False。可能有人会这样...

    青南
  • 蓝牙遥控平衡小车的制作

    出于业余爱好,以及学习自动化控制PID理论,经过多种选择后决定制作平衡车进行实际操练。刚开始试着用单纯的裸机,完成直立控制,然后慢慢的又增加了屏幕显示,用于参数...

    刘盼
  • torch.FloatTensor()

    类型转换, 将list ,numpy转化为tensor。 以list -> tensor为例:

    于小勇
  • 异常处理第三讲,SEH(结构化异常处理),异常展开问题

               异常处理第三讲,SEH(结构化异常处理),异常展开问题 不知道昨天有木有小伙伴尝试写一下SEH异常处理的代码.如果没写过,请回去写( :...

    IBinary
  • LeetCode 287. Find the Duplicate Number

    一道好题目。 发现数组里重复的数字是什么,不借助额外的数据结构。数组里的数字范围是1-n,数组的个数是n+1,所以一定存在重复的情况。重复的个数至少是1。如果...

    ShenduCC
  • python实现一个简单的3389读取工具(1)

    lonelyvaf
  • 史上最全的OGG基础知识整理

    GoldenGate软件是一种基于日志的结构化数据复制软件。GoldenGate 能够实现大量交易数据的实时捕捉、变换和投递,实现源数据库与目标数据库的数据同步...

    JiekeXu之路

扫码关注云+社区

领取腾讯云代金券