多核

iOS 多线程GCD的简单使用

时间秒杀一切 提交于 2019-12-02 06:41:17
①什么是线程?什么是进程? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是 操作系统 结构的基础。 引用网上一个很形象的例子,一个软件就像一个工厂,工厂里有分管各项职能的车间(进程),但是由于资源等因素限制,同时每次只能有一个车间(进程)工作,但是一个车间里有许多工人(线程),可以由他们中的一个人或由多个人组成一个团队,由这个团队里的人来共同完成一项生产任务,在一个团队(A)进行一项生产任务时,其他团队(B)是无法参与该项生产任务的(此处的内存被A占用)。 ②什么是多核? 即多内核 (multicore chips)是指在一枚 处理器 (chip)中集成两个或多个完整的计算引擎( 内核 )。 再引用网上一个很形象的例子,比如说搬砖,给你100只手,你把这100只手全部装到一个人的身上,那么这就是多核,多核的好处显而易见,肯定比2只手搬砖快,但是缺点就是受限于人本身(CPU),如果重量太大,人的脊柱就会被压断。 ③为什么要使用多线程? 比如执行下面这段代码 for (int i = 0; i < 100000; i++) { NSLog(@"i = %d",i); } self.view.backgroundColor =

golang多核陷阱一例

三世轮回 提交于 2019-12-01 09:51:11
同时发布在 独立博客 。 以前一直以为,在Golang中,针对高并发的情况,采用多核处理一定效果最优,但是项目实践证明事实不是这样的。 在 Sniper 项目中(一个结合了 ab 和 siege 优点的http负载测试工具),原来一直设置cup使用数为系统cpu总数: runtime.GOMAXPROCS(runtime.NumCPU()) 在与ab的性能比较中一直有较大差距,GET请求局域网的一个10k大小的文件: 以下是ab的性能,并发100,总请求100k,执行时间16.082秒 Concurrency Level: 100 Time taken for tests: 16.082 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 1035500000 bytes HTML transferred: 1024000000 bytes Requests per second: 6218.04 [#/sec] (mean) Time per request: 16.082 [ms] (mean) Time per request: 0.161 [ms] (mean, across all concurrent requests) Transfer rate