pthread中线程是怎么创建的(2)---glibc到内核

#thrift

在glibc中线程创建是这个文件种来定义的:nptl/pthread_create.c 创建过程为,pthread_create 调用__pthread_create_2_0, __pthread_create_2_0调用__pthread_create_2_1, 或者pthread_create直接调用__pthread_create_2_1,在由__pthread_create_2_1调用create_thread来创建。 在create_thread中,首先是设置了很多内核clone的标志,因为对内核来说每次创建都是创建一个内核级的线程或是内核级进程。

阅读更多

April 28, 2013

pthread中线程是怎么创建的(1)---glibc中的别名机制symver(symbol version)

#thrift

那天看了看glibc的线程相关的代码之后,又想看看线程的创建过程,今天趁着程序还在跑的功夫看了看glibc和内核代码,简单过了一下,也顺便记录下。 glibc种线程创建是这个文件种来定义的:nptl/pthread_create.c 我们平时使用的时候一般是include pthread.h文件就可以使用pthread_create来创建线程了,但是在这个pthread_create.c文件中居然是直接找不到pthread_create函数的定义的,找到的只是:

阅读更多

April 28, 2013

线程种的gettid和pthread_self区别

#kernel

这几天写程序老是使用thread来做,所以自己封装了一个threadbase的类来做简单的测试使用,但是在写的过程种发现又两个获取线程id的函数:pthread_self和gettid,那这两个函数有什么区别呢? 看gettid的man,这样写道:

阅读更多

April 22, 2013

crontab 环境变量导致脚本运行错误

#crontab

1.缺少LANG的ls取值错误 程序: yestoday=`date +%Y%m%d -d-1day` ytoday=`date +%F -d-1day` pathroot="/data5/tt_chat/" filelist=`ls $pathroot/data/ -l|grep $ytoday|awk '{print $8}'` echo $filelist 按时间过滤过滤出昨天一天生成的文件,让后再做处理,本地测试执行,没有问题,加入crontab执行总是没有数据文件过滤出来,但是自己再本地执行,就可以了

阅读更多

April 15, 2013

mysqldb:2014:Commands out of sync; you can't run this command now

#shell#mysql

自己写了一个python的mysql的访问类,在python的多线程种使用种有了点问题,就是报这个2014的错误,在网上搜了很多资料,基本都是说mysqldb有问题,但是在解决方法上我这里测试通过一种方式: 在每次查询或是更新的时候,从新获取一个sql执行结构体cursor,执行完毕之后在close这个cursor,例如在类方法种我这样写:

阅读更多

February 5, 2013

python中thread的简单使用

#mysql

今天在整理一个pyton的脚本,功能是以http+json返回数据拉去线上一些模块的状态信息,一般在5分钟以内就可以跑完,昨天开始由于原始数据太多了,结果搞得5分钟跑不完了,后面的数据统计就有点乱了,仔细分析看了看之后是在网络数据拉去上花费的时间比较多,原来是单进程,单线程的,就想着如果修改成多线程会好一点,python种线程使用还是比较简单的了,从threading.thread继承了一个线程类,类里面直接编写__init__, run, __del__方法,这样就是一个基本的线程类了

阅读更多

February 5, 2013

js中使用sort对json数据进行排序

json格式的数据输出的时候一般是没有排序的,在展示的时候需要另外进行排序。这里总结了js对json数据排序的方法。 js中是弱类型变量,所以一般获取到数据是会按照系统自定义的类型处理,在我的系统中系统默认把数字也转化成了: “value”:“17404"这样的格式, 所以在处理上如果直接比较排序,它就会按照字符串来排序,所以要强制类型转化一下,转换为整型。 不说了,直接贴代码吧: 字符串比较排序:kdata是一个json数组,里面的有value字段,如下:

阅读更多

December 11, 2012

terminate called after throwing an instance of 'stdz::logic_error'

#uwsgi#django

程序编译没有问题,突然在测试的时候出了这样的问题。 terminate called after throwing an instance of ‘std::logic_error’ what(): basic_string::_S_construct NULL not valid 这个问题在我这里是因为调用了getenv,但是在测试的是后getenv的返回值是一个空值,而我没有检查就直接给string赋值。

阅读更多

December 4, 2012

Apache显示有加载php模块却不支持php文件解析问题

#crontab#cgi

在测试环境搭建了一个新的LAMP环境,但是结果比较奇怪,访问页面的时候提示如下: Apache/2.2.9 (Unix) PHP/5.3.3 mod_wsgi/3.3 Python/2.6.4 Server at zhwen.isoso.com Port 80 这里显示已经成功加载了php的模块,应该可以支持php了,但是每次遇到php文件,结果还是原文下载了。 http.conf中的配置也没有错啊

阅读更多

November 19, 2012

c种内存分配错误:malloc.c:3096: sYSMALLOc: Assertion

#uwsgi#django

今天在学习一个小程序的时候出现了下面的内存分配错误。 rbtest: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)’ failed. Aborted

阅读更多

November 19, 2012

nginx模块编程学习笔记3--模块主要数据结构

#2pc#uwsgi

在nginx模块编写种主要会涉及到下面3个数据结构,这一篇我就先来看看这3个数据结构的作用和意义。 ngx_command_t ngx_module_t ngx_http_module_t 前面这两个是定义在这个文件中:src/core/ngx_core.h

阅读更多

October 31, 2012

nginx模块编程学习笔记2--数据类型

#2pc#uwsgi

在模块种出现了一些nginx特有的数据类型,这里做笔记记录一下。 nginx种数据类型:整型,字符串 src/core/ngx_config.h 种定义了这么集中比较常用的数据类型: typedef intptr_t ngx_int_t; typedef uintptr_t ngx_uint_t; typedef intptr_t ngx_flag_t;

阅读更多

October 31, 2012

nginx+uwsgi+django/flask配置

#2pc#php#flask#uwsgi#netfilter

这几天在不断的倒腾nginx的相关东西,今天测试了nginx+uwsgi+django/flask这个组合,配置启动没有问题,后面看有没有什么app可以做。另外之前做过Nginx+mod_wsgi+webpy 的配置开发,但是mod_wsgi感觉好久没有开发维护了,而且据网上说uwsgi的效率很高,倒腾一下。 nginx我这几天一直使用的nginx-1.2.0的,nginx的编译就不说了,直接./configure && make &&make install

阅读更多

October 30, 2012

redis使用----数据类型和操作命令

#redis#db

最简单的就是key<-->value, 就是每条数据都是一个键名一个键值,如下面的操作 在编译之后在源代码目录种就可以启动redis helight@zhwen:/data/opencode/redis/redis-2416/src$ ./redis-server 另外在这个源代码目录下还有一个集成客户端:和mysql命令一样启动后就可以登录redis进行命令操作了。

阅读更多

October 24, 2012

redis学习笔记--编译配置

#redis#db

一直在找个一靠谱的内存数据库,这里所谓的靠谱,是数据能上能下,能在内存中高速的读取写入,而且还能把数据落地保存,下次启动的时候直接先加载磁盘上的数据。以前都是使用memcache来保存数据,让后自己再从memcache取数据到mysql,后来公司有个ttc的内存数据库,可以做单表映射,让后数据写入ttc后它自己再写入mysql,还比较靠谱一点,速度也有,数据也是相对靠谱,但是它也优缺点,数据不能从mysql加载过去。

阅读更多

October 24, 2012

ddddddd