摘要: linux系统调用fork, vfork, clone:fork()、 vfork()、 clone()的区别 Linux下的进程与线程比较相近:它们都需要相同的数据结构来表示,即task_struct。区别在于一个有独立的用户空间,一个是共享的用户空间(如果完全没有用户空间则是内核线程,不需要)。Linux的用户进程不能直接被创建出来,因为不存在这样的API。它只能从某个进程中复制出来,再通过exec这样的API来切换到实际想要运行的程序文件。复制的API包括三种:fork、clone、vfork。这三个API的内部实际都是调用一个内核内部函数do_fork,只是填写的参数不同而已。而for 阅读全文
posted @ 2013-05-02 19:34 tangr206 阅读(616) 评论(0) 推荐(0)
摘要: LinuxThread(内核2.0到内核2.4期间) Linux内核只提供了轻量进程的支持,限制了更高效的线程模型的实现,但Linux着重优化了进程的调度开销,一定程度上也弥补了这一缺陷。目前最流行 的线程机制LinuxThreads所采用的就是线程-进程"一对一"模型,调度交给核心,而在用户级实现一个包括信号处理在内的线程管理机制。 Linux-LinuxThreads的运行机制正是本文的描述重点 最初的进程定义都包含程序、资源及其执行三部分,其中:1.程序通常指代码,2.资源通常包括内存资源、IO资源、信号处理等部分,3.程序的执行通常理解为执行上下文,包括对cpu的占 阅读全文
posted @ 2013-05-02 19:02 tangr206 阅读(543) 评论(0) 推荐(0)
摘要: 字符串分割1 #!/bin/bash 2 pwd=$(dirname $0) && cd ${pwd} 3 4 echo ================ [ $(date "+%F %T") BEGIN ] ======================= 5 6 sms_list="18610489065,13581697175,18600276158,18600574510,18600883672" 8 content="fuck" 9 10 if [[ -n "${content}" ]]; 阅读全文
posted @ 2013-05-02 18:09 tangr206 阅读(234) 评论(0) 推荐(0)
摘要: dict设置默认值 “” A common use of dictionaries is to count occurrences by setting the value of d[key] to 1 on its first occurrence, then increment the value on each subsequent occurrence. This can be done several different ways, but the get() method is the most succinct: ”“” ... 阅读全文
posted @ 2013-04-16 18:29 tangr206 阅读(302) 评论(0) 推荐(0)
摘要: 参考:http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/http://blog.shine-it.net/python/dive-into-generator您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。清单 1. 简单输出斐波那契數列前 N 个数 def fab(max): n, a, b = 0, 0, 1 while n <... 阅读全文
posted @ 2013-04-09 20:05 tangr206 阅读(1626) 评论(0) 推荐(0)
摘要: apue说linux线程是用clone创建子进程实现的,所以两个线程会有不同进程ID,我上机试验ID是一样的,为什么啊linux是不是已经完全实现了线程 LWP LightWeightNPTLvs LinuxThread Linux从内核2.0到内核2.4期间多线程编程使用的是LinuxThread,但使用这种方式写出的多线程程序在诸多特性上并不是跟POSIX标准兼容的(通过网址:http://www.kernel.org/doc/man-pages/online/pages/man7/pthreads.7.html可以了解诸多的不兼容特性)。这显然跟Linux号称的跟POSIX标准兼容不.. 阅读全文
posted @ 2013-03-29 13:20 tangr206 阅读(569) 评论(0) 推荐(0)
摘要: from http://timyang.net/linux/linux-process/上周碰到部署在真实服务器上某个应用CPU占用过高的问题,虽然经过tuning, 问题貌似已经解决,但我对tuning的方式只是基于大胆的假设并最终生效了。我更希望更多的求证一下程序背后CPU及OS kernel当时的运作机制。所以我读了一些Linux内核设计与实现及其他一些相关资料,对Linux process的机制与切换有了更多一些体会。本文尽可能条理一点,但由于牵涉点较多,同时自己可能觉得某些点有记录的价值,因此文字可能会零散。进程状态Linux进程的状态比较容易理解,值得注意的是 UNINTERRUP 阅读全文
posted @ 2013-03-29 10:43 tangr206 阅读(426) 评论(0) 推荐(0)
摘要: TCP / IP 协议浅析fron http://kenby.iteye.com/blog/1013313博客分类:Network 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port ... 阅读全文
posted @ 2013-03-22 12:50 tangr206 阅读(285) 评论(0) 推荐(0)
摘要: @ http://kenby.iteye.com/blog/1159621一. Tornado是什么?Facebook发布了开源网络服务器框架Tornado,该平台基于Facebook刚刚收购的社交聚合网站FriendFeed的实时信息服务开发而来.Tornado由Python编写,是一款轻量级的Web服务器,同时又是一个开发框架。采用非阻塞I/O模型(epoll),主要是为了应对高并发 访问量而被开发出来,尤其适用于comet应用。二. 为什么要阅读Tornado的源代码Tornado由前google员工开发, 代码非常精练, 实现也很轻巧, 加上清晰的注释和丰富的demo, 我们可以很容易 阅读全文
posted @ 2013-03-21 21:33 tangr206 阅读(435) 评论(0) 推荐(0)
摘要: candidates = "state node seelog state runstate libtime start stop enable onedeploy deploy make quit FeedAssistant FeedDispatcher FeedNews FeedMini FeedClass FeedGroup FeedFocus FeedSink FeedMark".split()python以目录来组织模块, 就是所谓的包. 用包的一大好处: 可以解决名字空间冲突的问题, 即文件重名问题. 下面主要说3点: 1. 如何使一个目录变成包,如何impor 阅读全文
posted @ 2013-03-21 21:18 tangr206 阅读(244) 评论(0) 推荐(0)