摘要: 在这个多核时代,如何充分利用每个 CPU 内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务端应用程序,到需要同时打开十几个页面,每个页面都有几十上百个链接的 web 浏览器应用程序,从保持着几 t 甚或几 p 的数据的数据库系统,到手机上的一个有良好用户响应能力的 app,为了充分... 阅读全文
posted @ 2015-02-19 19:09 挨踢人啊 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销... 阅读全文
posted @ 2015-02-19 18:15 挨踢人啊 阅读(238) 评论(0) 推荐(0) 编辑
摘要: Posix条件变量int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);int pthread_cond_destroy(pthread_cond_t *cond);int pthread_cond_w... 阅读全文
posted @ 2015-02-19 18:02 挨踢人啊 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 屏障int pthread_barrier_init(pthread_barrier_t *restrict barrier, const pthread_barrierattr_t *restrict attr, ... 阅读全文
posted @ 2015-02-19 17:51 挨踢人啊 阅读(400) 评论(0) 推荐(0) 编辑
摘要: Posix读写锁int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);int pthread_rwlo... 阅读全文
posted @ 2015-02-19 17:44 挨踢人啊 阅读(430) 评论(0) 推荐(0) 编辑
摘要: Posix信号量Posix 信号量有名信号量无名信号量sem_opensem_initsem_closesem_destroysem_unlink sem_waitsem_post 有名信号量#include /* For O_* constants */#include ... 阅读全文
posted @ 2015-02-19 17:24 挨踢人啊 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 线程特定数据int pthread_key_create(pthread_key_t *key, void (*destr_function) (void *));int pthread_key_delete(pthread_key_t key);int pthread_setspecific(p... 阅读全文
posted @ 2015-02-19 17:11 挨踢人啊 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 初始化/销毁线程属性int pthread_attr_init(pthread_attr_t *attr);int pthread_attr_destroy(pthread_attr_t *attr);线程分离属性int pthread_attr_getdetachstate(const pthr... 阅读全文
posted @ 2015-02-19 16:52 挨踢人啊 阅读(227) 评论(0) 推荐(0) 编辑
摘要: POSIX线程库 与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”开头,要使用这些函数库,要通过引入头文,而且链接这些线程函数库时要使用编译器命令的“-lpthread”选项[Ubuntu系列系统需要添加的是”-pthread”选项而不是”-lpthread”,... 阅读全文
posted @ 2015-02-19 16:33 挨踢人啊 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 线程概念 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列/指令序列”; 一切进程至少有一个执行线程;进程 VS. 线程 1.进程是资源分配(进程需要参与资源的竞争)的基本单位,而线程是处理器调度(程序执行)的最小单位; ... 阅读全文
posted @ 2015-02-19 16:20 挨踢人啊 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 实践:实现一个先进先出的共享内存shmfifo 使用消息队列即可实现消息的先进先出(FIFO), 但是使用共享内存实现消息的先进先出则更加快速; 我们首先完成C语言版本的shmfifo(基于过程调用), 然后在此基础上实现C++版本的ShmFifo, 将1块共享内存与3个信号量(1个mu... 阅读全文
posted @ 2015-02-19 16:08 挨踢人啊 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 实践1:信号量实现进程互斥父子进程执行流程如下:父进程子进程PPO(print)X(print)sleepsleepO(print)X(print)VVsleepsleep从图中可以看出, O或X总是成对出现的, 要么两个O, 要么两个X;/**P,V原语实现父子进程互斥使用终端**/// 程序代... 阅读全文
posted @ 2015-02-19 15:58 挨踢人啊 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 信号量API#include #include #include int semget(key_t key, int nsems, int semflg);int semctl(int semid, int semnum, int cmd, ...);int semop(int semid, st... 阅读全文
posted @ 2015-02-19 15:52 挨踢人啊 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 1. 创建/获取一个共享内存#include #include /* For mode constants */#include /* For O_* constants */int shm_open(const char *name, int oflag, ... 阅读全文
posted @ 2015-02-19 15:14 挨踢人啊 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 共享内存API#include #include int shmget(key_t key, size_t size, int shmflg);void *shmat(int shmid, const void *shmaddr, int shmflg);int shmdt(const void ... 阅读全文
posted @ 2015-02-19 15:02 挨踢人啊 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 概述 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据(如图)。 共享内存 VS. 其他IPC形式 用管道/消息队列传递数据 用共享内存传递数据 ... 阅读全文
posted @ 2015-02-19 14:51 挨踢人啊 阅读(290) 评论(0) 推荐(0) 编辑