2016-09-30 ruki
原子操作,线程间交互数据最细粒度的同步操作,它可以保证线程间读写某个数值的原子性。 由于不需要加重量级的互斥锁进行同步,因此非常轻量,而且也不需要在内核间来回切换调度,效率是非常高的。。 那如何使用原子操作了,各个平台下都有相关api提供了支持,并且向gcc、clang这些编译器,也提供了编译器级的__builtin接口进行支持 windows的Interlockedxxx和Interlockedxxx64系列api macosx的OSAtomicXXX系列api gcc的__sync_val_compare_and_swap和__sync_val_compare_and_swap_8等__builtin接口 x86和x86_ 继续阅读 »
2013-07-28 码农明明桑
面试中遇到,但是不会,回来google到,分享下吧,据说是老掉牙的问题 HashMap 是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap 允许将null 作为一个entry 的key 或者value,而Hashtable 不允许。 HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因为contains方法容易让人引起误解。 Hashtable 继承自Dictionary 类,而HashMap 继续阅读 »
2015-11-06 Li Shuai
协程是用户态内的,或者准确点说是线程内部的一种上下文切换技术,由于协程切换是在用户态下完成的,所以省去了线程切换时频繁出入内核态的资源开销,可以形成一种很高效的协作式并发技术。 这个简短的视频介绍了一些有关协程、并发之类的东西,很有意义。 Coroutines, event loops, and the history of Python generators 从里面学习到两种很好的协程的调度方式。把代码拿过来分享一下。 Coroutine trampoline 这种方式下的协程调度比较好理解,就是从一个初始状态开始,一条执行线索不断的在多个协程之间切换,就好像多个协程协作完成一项任务。 代码: def co_tramp 继续阅读 »
2015-05-28 litaotao
1. 什么是Gevent gevent是一个基于libev的python并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效.而且其中有个monkey类, 将现有基于Python线程直接转化为greenlet(类似于打patch). 继续阅读 »
2019-01-20 biezhi
Java 并发常用的组件中有一种队列叫阻塞队列(BlockingQueue),当队列为空时,获取元素的线程会阻塞等待直到队列有数据;当队列满时,想要存储元素的线程会阻塞等待直到队列有空间。我们经常会用这种数据结构可以实现生产者、消费者模型。 继续阅读 »
2016-09-19 曹强
你可能知道,Javascript语言的执行环境是"单线程"(single thread)。 所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。 more 这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。 为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous)。 继续阅读 »
2016-06-06 Li Shuai
最不喜欢在Tornado中使用任何同步阻塞型的东西,不想让ioloop阻塞在某个IO调用上,因为单线程的东西任何阻塞都是代价很高的,除非你的数据库被优化的性能很好,速度很快。除了之前的线程池之外,直接使用异步库也是不错的选择,Motor就是Tornado里可以用的很好的异步库,它兼容Tornado的gen.coroutine式的异步调用形式,主要使用了greenlet来巧妙的封装PyMongo的同步API, 把底层的socketIO进行了异步化的处理,化同步为异步。 从使用的例子来分析Motor是如何把PyMongo的API异步化的: client = motor.MotorClient(...) db = client['te 继续阅读 »
2019-01-16 biezhi
后端开发中大家肯定遇到过实现一个线程安全的计数器这种需求,根据经验你应该知道我们要在多线程中实现 共享变量 的原子性和可见性问题,于是锁成为一个不可避免的话题,今天我们讨论的是与之对应的无锁 CAS。本文会从怎么来的、是什么、怎么用、原理分析、遇到的问题等不同的角度带你真正搞懂 CAS。 继续阅读 »
2015-04-07 Robin Wen
目录 Table of Contents {:toc} 文/Robin 本站推广 币安是全球领先的数字货币交易平台,提供比特币、以太坊、BNB 以及 USDT 交易。 币安注册: https://accounts.binancezh.pro/cn/register/?ref=11190872 邀请码: 11190872 一 引子 mysqldump 相信大家已经耳熟能详,相比 mysqldump,mydumper 具有如下优势: 多线程 高性能 仅凭多线程这一点就可以让你对 mydumper 爱不释手。mydumper 最新稳定版是 0.6.2,读者可以从这里下载到。本文讲解怎么编译安装 mydumper,以及怎么使用 继续阅读 »
2015-09-23 Li Shuai
9月19号参加了北京的PyCon2015,有众多互联网公司参加,而且云计算类的公司颇多,足以看出Python在云计算领域的应用之广。 虽然会上广告很多,但也不乏干货: 1.美团云的分享: 简单语言构建复杂系统 幻灯 2.Splunk首席工程师丁来强的分享: Python高效函数式编程 幻灯 3.SpeedyCloud工程师汪尊: Python的多线程与多进程 4.豆瓣的分享: Pidl(Python Interface Description Language) 同时,可以看到Tornado这个异步非阻塞高性能轻量级服务器在互联网内有着大范围的应用,Python的胶水特性在云计算领域是粘和多模块的有力武器。 PyCon 继续阅读 »