美文网首页
预备知识:关于多线程

预备知识:关于多线程

作者: 不吃甜食会怎样 | 来源:发表于2018-10-18 07:06 被阅读0次

问题1:

工作线程数是不是设置的越大越好?

回答:

1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义

2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低

问题2:

调用sleep()函数的时候,线程是否一直占用CPU?

回答:

不占用,等待时会把CPU让出来,给其他需要CPU资源的线程使用不止调用sleep()函数,在进行一些阻塞调用,例如网络编程中的阻塞accept()【等待客户端连接】和阻塞recv()【等待下游回包】也不占用CPU资源

问题3:

如果CPU是单核,设置多线程有意义么,能提高并发性能么?

回答:

即使是单核,使用多线程也是有意义的

1)多线程编码可以让我们的服务/代码更加清晰,有些IO线程收发包,有些Worker线程进行任务处理,有些Timeout线程进行超时检测

2)如果有一个任务一直占用CPU资源在进行计算,那么此时增加线程并不能增加并发,例如这样的一个代码

 while(1){ i++; }

该代码一直不停的占用CPU资源进行计算,会使CPU占用率达到100%

3)通常来说,Worker线程一般不会一直占用CPU进行计算,此时即使CPU是单核,增加Worker线程也能够提高并发,因为这个线程在休息的时候,其他的线程可以继续工作

相关文章

  • 预备知识:关于多线程

    问题1: 工作线程数是不是设置的越大越好? 回答: 1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核C...

  • 10 并发容器(ConcurrentHashMap)

    1 预备知识 1.1 为什么高并发中比较少用HashMap和HashTable HashMapHashmap多线程...

  • 关于链表的预备知识

    定义结点 创建链表结点 连接链表各结点 打印链表结点的值 打印整个链表中的值 删除整个链表 在链表尾部加入结点 特...

  • OC 多线程基础知识:锁

    想要深入理解多线程,锁是预备知识,这里总结一下OC中锁相关的知识,打好基础。 为什么要有锁? 锁概念的提出,是为了...

  • 【 数据结构 & 算法 】—— 二叉树、图

    思维导图 预备知识:二叉树定义(★) 预备知识_二叉树定义.cpp 预备知识:二叉树的深度遍历(★) 预备知识_二...

  • masonry从入门到爆炸💥💥💥

    Masonry 是强大AutoLayout框架。 masonry预备篇 知识点(1)AutoLayout关于更新的...

  • masonry布局直排、竖排多个view视图

    Masonry 是强大AutoLayout框架。 masonry预备篇 知识点(1)AutoLayout关于更新的...

  • 预备知识

    M3内核基本结构 Cortex-M3内核是32位的 M3F103内核采用Thumb-2指令集 支持16/32位指令...

  • 预备知识

    数据仓库定义 数据仓库的基本概念 面向主题的、集成的、非易失的、反应历史变化的,数据集合,用于支持管理决策。 数据...

  • 预备知识

    定义一个结构体,包括邻接结点和边权值,用来表示一条边 用vector表示结点 清空 添加 删除

网友评论

      本文标题:预备知识:关于多线程

      本文链接:https://www.haomeiwen.com/subject/gxzowftx.html