协程是用户态的线程,并非真正意义上的线程, 协程只有一个线程,看起来并发的效果是因为它利用了寄存器的上下文切换, 多线程和多进程比较消耗cpu资源,当遇到修改数据的时候,还会遇到死锁的问题。 协程是最大的发挥了cpu的单核能力,遇到io阻塞就切换,阻塞完成之后切换回来。 协程的好处: 跨平台 跨体系 ...
分类:
其他好文 时间:
2018-06-03 21:29:52
阅读次数:
209
并行和串行执行 总结:线程有创建和上下文切换的开销。 ...
分类:
其他好文 时间:
2018-06-03 14:21:18
阅读次数:
163
原子性 原子是最小单元、不可再分的意思。原子性是指某个操作在获取CPU时间时,要么就给它足够时间,让这个操作执行完,要么就不执行这个操作,执行时不能出现上下文切换(把CPU时间从一个线程分配到另一个线程)。 Java中对变量的读取和赋值都是原子操作,但long、double类型除外,只有使用vola ...
分类:
编程语言 时间:
2018-05-27 12:11:20
阅读次数:
239
主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是《Java Concurrency in Practice》,结合自己的理解和实际应用对锁机制进行一个小小的总结。 首先需要强调的一点是:所有锁(包括内置锁和高级锁)都是有性能消耗的,也就是说在高并发的情况下,由于锁机制带来的上下文切换、资源同步 ...
分类:
编程语言 时间:
2018-05-26 20:24:49
阅读次数:
180
python调用的是操作系统的原生线程, 表面是多线程,同一时间只有一个线程在运行,我们看到的多线程并发的现象,只是python利用的cpu的上下文切换, cpu的计算速度很快,所以看起来是并发的效果。 所有如果你的代码是cpu密集型,用单线程比多线程效率可能更高, 如果是io密集型,用多线程的效率 ...
分类:
编程语言 时间:
2018-05-24 11:56:29
阅读次数:
241
在前面2篇文章分别讲到了线程和进程的由来、以及如何在Java中怎么创建线程和进程。今天我们来学习一下Thread类,在学习Thread类之前,先介绍与线程相关知识:线程的几种状态、上下文切换,然后接着介绍Thread类中的方法的具体使用。 以下是本文的目录大纲: 一.线程的状态 二.上下文切换 三. ...
分类:
编程语言 时间:
2018-05-23 14:58:57
阅读次数:
211
一、单线程为何这么快 1)绝大部分请求是纯粹的内存操作(非常快速) 2)采用单线程,避免了不必要的上下文切换和竞争条件 3)非阻塞IO 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll中的读、写、关闭、连接都转化成了事件,然后利用epoll的多路复用特性,绝不在io上浪 ...
分类:
编程语言 时间:
2018-05-18 01:27:14
阅读次数:
217
一、Single Thread Non-Blocking I/O. 非阻塞式IO适用于IO密集型,把io阻塞交给linux系统模块(如图中的Posix Async Threads)去处理。 二、Multi Threaded Server 线程维护和线程上下文切换都会消耗资源。 ...
分类:
编程语言 时间:
2018-05-13 23:00:14
阅读次数:
204
今天在网上瞎逛,偶然发现一款监控工具:netdata,感到一惊,监控工具竟然可以这么漂亮! 简单了解一下,这款工具还算比较新,监控系统运行状态的功能非常强大,除了监控cpu,网卡,磁盘,内存,进程等等之外,甚至能监控系统的cpu中断,上下文切换等等非常深入的系统运行状态。 新版本还支持监控常用的we ...
分类:
Web程序 时间:
2018-05-07 00:44:07
阅读次数:
4552
减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。1. 无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一些办法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。2. CAS算法。Java的Atomic包使用CAS算法 ...
分类:
其他好文 时间:
2018-05-04 12:05:19
阅读次数:
173