
操作系统
陆业聪
腾讯高级客户端工程师。这里有大前端的经验分享和技术干货。关注公众号“陆业聪”,获取最新技术文章。
展开
-
随笔之如何实现一个线程池
转自:http://www.cnblogs.com/innost/archive/2011/11/24/2261454.html一 缘由: 最近因工作问题,需要实现一个简单的线程池,满足以下要求: 1 可伸缩,即一旦发现线程不够用,则可以动态增加线程。(至于缩减线程,这个可能难度比较大,暂时不考虑)。 2 支持超时任务。比如提交一个Task,可以设置5秒后转载 2015-01-29 12:22:41 · 729 阅读 · 0 评论 -
printf("%d",5.01)和printf("%f",5)的输出结果
printf("%f\n",5); printf("%d\n",5.01); printf("%f\n", (float)5); printf("%f\n", 5.f); 输出结果:看到结果,会感觉非常奇怪。1处怎么会输出0呢?2又为何会显示这么大的一个数呢?解释:下面是转自网上的一篇博客的解释1,之所以没输出5,这是C语言设计的原因。2,之所转载 2015-04-10 10:33:24 · 789 阅读 · 0 评论 -
共享库查找过程
在开源系统中,包括所有的Linux系统在内的很多都是基于Glibc的。在这些系统里面,动态链接的ELF可执行文件在启动是同时会启动动态链接骑。在Linux系统中,动态链接器是/lib/ld-linux.so.X(X是版本号),程序所依赖的共享对象全部由动态链接器负责装载和初始化。任何一个动态链接的模块所依赖的模块路径保存在“.dynamic”段里,由DT_NEED类型的项表示。动态链接器对于模块的转载 2015-03-25 16:32:05 · 973 阅读 · 0 评论 -
Mutex例程
这是msdn上的例程,运行需要在项目属性->常规->公共语言运行时支持 选/clr// This example shows how a Mutex is used to synchronize access// to a protected resource. Unlike Monitor, Mutex can be used with// WaitHandle.WaitAll an原创 2013-09-06 22:16:41 · 969 阅读 · 0 评论 -
opencv中的线程安全问题
最近做的项目需要实现多线程播放多路视频,但是代码经常会报insufficient thread locking around avcodec_open/close()的错误,因为在机子上貌似也能跑,就暂时没理。 今天换成在服务器上测试,因为cup速度加快,线程冲突加剧,cvCreateFileCapture((char*)pName)经常返回空指针。opencv官方并没有保证函数都是线程安原创 2013-10-12 20:53:03 · 2351 阅读 · 1 评论 -
CPU高速缓存行对齐(cache line)
转载:http://blog.youkuaiyun.com/snowwalf/article/details/6784014CPU的高速缓存一般分为一级缓存和二级缓存,现今更多的CPU更是提供了三级缓存。CPU在运行时首先从一级缓存读取数据,如果读取失败则会从二级缓存读取数据,如果仍然失败则再从内存中存读取数据。而CPU从一级缓存或二级缓存或主内存中最终读取到数据所耗费的时钟周期差距是非常转载 2014-11-07 16:32:01 · 15446 阅读 · 0 评论 -
Windows Socket编程
Windows下Socket编程主要包括以下几部分:服务端1、初始化Windows Socket库。2、创建Socket。3、绑定Socket。4、监听。5、Accept。6、接收、发送数据。客户端1、初始化Windows Socket库。2、创建Socket。3、连接Socket。4、接收、发送数据。服务端每接收到一个客户端的Socke转载 2013-10-31 15:07:28 · 599 阅读 · 0 评论 -
操作系统用户态和内核态之间的切换过程
操作系统用户态和内核态之间的切换过程1. 用户态和内核态的概念区别究竟什么是用户态,什么是内核态,这两个基本概念以前一直理解得不是很清楚,根本原因个人觉得是在于因为大部分时候我们在写程序时关注的重点和着眼的角度放在了实现的功能和代码的逻辑性上,先看一个例子:1)例子 void testfork(){ if(0 = = fork()){ print转载 2014-10-17 23:13:34 · 5101 阅读 · 0 评论 -
访问栈上的数组和堆中的数组的区别
先看一段简单的代码void test(){ int a[10] = {0}; int* b = malloc(10 * sizeof(int)); a[0] = 0; b[0] = 0;}将以上代码保存成test.c,用gcc -c test.c生成目标代码,用objdump -o 反编译,得到以下汇编 0: 55原创 2014-12-15 17:55:38 · 1986 阅读 · 0 评论 -
vim的学习
之前用im时一直不懂就百度,今天发现vim带了一个不错的初学者教程,原创 2014-11-07 12:55:22 · 555 阅读 · 0 评论 -
sed命令详解
1.简介sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行转载 2014-12-19 09:18:45 · 513 阅读 · 0 评论 -
大端小端格式详解
1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit转载 2014-07-29 23:36:54 · 548 阅读 · 0 评论 -
线程上下文切换和进程上下文切换的区别
进程切换分两步1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文。对于linux来说,线程和进程的最大区别就在于地址空间。对于线程切换,第1步是不需要做的,第2是进程和线程切换都要做的。所以明显是进程切换代价大线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系转载 2015-02-01 23:54:59 · 6316 阅读 · 0 评论 -
top命令中的几个参数含义
n: %MEM -- Memory usage (RES) A task's currently used share of available physical memory. o: VIRT -- Virtual Image (kb) The total amount of virtual memory used by原创 2015-09-05 21:21:40 · 663 阅读 · 0 评论