2017-08-08 17:59
⁄ 工业·编程
⁄ 共 1558字
1、协程是什么?
(1)线程
每一个线程都代表一个执行序列。当我们在程序中创建多线程的时候,看起来,同一时刻多个线程是同时执行的,不过实质上多个线程是并发的,因为只有一个CPU,所以实质上同一个时刻只有一个线程在执行。在一个时间片内执行哪个线程是不确定的,我们可以控制线程的优先级,不过真正的线程调度由CPU的调度决定。
(2)协程
协程跟线程都代表一个执行序列。不同的是,协程把线程中不确定的地方尽可能的去掉...
协程阅读全文
2017-08-01 16:03
⁄ 工业·编程
⁄ 共 4048字
在linux多线程环境下对同一变量进行读写时,经常会遇到读写的原子性问题,即会出现竞争条件。为了解决多个线程对同一变量访问时的竞争条件问题,操作系统层面提供了锁、信号量、条件变量等几种线程同步机制。如果对变量的每次访问都使用上述机制,由于系统调用会陷入内核空间,需要频繁的进行上下文切换,这就导致了程序的时间开销比较大。
自然的,我们就想到,在多线程环境中,在某些情况下是否能减少甚至避免使用系统调用?...
多线程编程阅读全文
2017-07-25 15:40
⁄ 工业·编程
⁄ 共 4734字
libco 协程库在单个线程中实现了多个协程的创建和切换。按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 “调用——返回”,每次都是从函数的入口处开始执行。而libco 中的协程却实现了函数执行到一半时,切出此协程,之后可以回到函数切出的位置继续执行,即函数的执行可以被“拦腰斩断”,这种在函数任意位置 “切出——恢复” 的功能是如何实现的呢?
本文从...
libco, 协程阅读全文
2017-07-18 12:15
⁄ 工业·编程
⁄ 共 5451字
微信诞生于2011年1月,当年用户规模为0.1亿左右;2013年11月,微信月活跃用户数达到3.55亿,一跃成为亚洲地区拥有最大用户群体的移动终端即时通讯软件。
面对如此体量的提升,微信后台也曾遭遇棘手的窘境;令人赞叹的是技术人及时地做出了漂亮的应对。
这背后有着怎样的技术故事?
此时此刻,你在微信手机端发出的请求,是怎样被后台消化和处理的?这次,我们聚焦微信后台解决方案之协程库libco。该项目在保留后台敏捷的同步风...
libco, 协程, 微信阅读全文
2017-07-11 11:54
⁄ 工业·编程
⁄ 共 1696字
相比std::async,std::thread就原始多了。thread一定会创建新线程(而不是像async那样创建的时候可能不会,后面才创建新线程(std::launch::deferred)),并且创建它的线程还必须指定以何种策略等待新线程。
#include <iostream>
#include <thread>
void task() {
for (int i = 0; i < 10; i++) {
std::cout << "A";
...
并发阅读全文
2017-07-07 07:07
⁄ 工业·编程
⁄ 共 748字
系统架构师的职责具体如下( 来自国家级教材 《系统架构设计师教程》):
1、确认需求
在项目开发过程中,架构师是在需求规格说明书完成后介入的,需求规格说明书必须得到架构师的认可。架构师需要和分析人员反复交流,以保证自己完整并准确地理解用户需求。
2、系统分解
依据用户需求,架构师将系统整体分解为更小的子系统和组...
架构师, 软件之路阅读全文
2017-07-04 11:52
⁄ 工业·编程
⁄ 共 1448字
std::async创建一个后台线程执行传递的任务,这个任务只要是callable object均可,然后返回一个std::future。future储存一个多线程共享的状态,当调用future.get时会阻塞直到绑定的task执行完毕:
#include <iostream>
#include <future>
void task() {
for (int i = 0; i < 10; i++) {
std::cout << "A";
}
...
并发阅读全文
2017-06-28 11:46
⁄ 工业·编程
⁄ 共 2610字
我们知道auto_ptr,unique_ptr构造或者析构后,都会将自身的管理权限转移,那么如何解决这个问题呢,boost库也给我们提供了带引用计数的指针。
1:shared_ptr
shared_ptr是最常用的智能指针,shared_ptr采用了引用计数器,多个shared_ptr中的T *ptr指向同一个内存区域(同一个对象),并共同维护同一个引用计数器。shared_ptr定义如下,记录同一个实例被引用的次数,当引用次数大于0时可用,等于0时释放内存。所以用户可以自由的赋...
智能指针阅读全文
2017-06-21 11:27
⁄ 工业·编程
⁄ 共 3365字
在C++中我们为了避免内存泄漏而引入的智能指针
因为在C++中我们频繁使用堆内存,但是堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。我们使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题,使用智能指针能更好的管理堆内存。实际上我们这个智能指针即对象,因为对...
智能指针阅读全文
2017-06-14 11:21
⁄ 工业·编程
⁄ 共 1936字
I/O复用虽然可以同时监听多个文件描述符,但他本身是阻塞的。并且,当多个文件描述符同时就绪时,如果不采用额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符,这样I/O复用看起来就像是串行的,要实现并法就需要用多进程或多线程实现。
select poll epoll 比较
1:事件集
select的参数没有将文件描述符单独与事件绑定,而是用文件描述符的集合fd_set中的每一位代表文件描述符,0/1代表事件是否发...
epoll, IO, poll, 比较阅读全文