2011年12月26日

鱼还是熊掌:浅谈多进程多线程的选择

摘要: 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”,这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有这么简单了,选的不好,会让你深受其害。 经常在网络上看到有的XDJM问“多进程好还是多线程好?”、“Linux下用多进程还是多线程?”等等期望一劳永逸的问题,我只能说:没有最好,只有更好。根据实际情况来判断,哪个更加合适就是哪个好。 我们按照多个不同的维度,来看看多线程和多进程的对比(注:因为是感性的比较,因此都是相对的,不是说一个好得不得了,另外一个差的无法忍受)。 看起来比较简单,优势对比上是“线程 2.5 v 3.5 进 阅读全文

posted @ 2011-12-26 14:23 千兵卫博士 阅读(588) 评论(0) 推荐(1) 编辑

2011年12月21日

coredump简介与coredump原因总结

摘要: 什么是coredump?通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件。许多程序和操作系统出错时会自动生成一个core文件。如何使用coredump?coredump可以用在很多场合,使用Linux,或者solaris的人可能都有过这种经历,系统在跑一些压力测试或者系统负载一大的话,系统就hang住了或者干脆system panic.这时唯一能帮助你分析和解决问题的就是coredump了。现在很多应该程序出错时也会出现coredump.分析coredump的工具现在大部分类unix操作系统都提供了分析core文 阅读全文

posted @ 2011-12-21 16:04 千兵卫博士 阅读(24910) 评论(0) 推荐(0) 编辑

2011年12月20日

数据库SQLite介绍

摘要: 1.1 SQLite概述1.1.1 SQLite简介SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统。SQLite是D. Richard Hipp 用C语言编写的开源嵌入式数据库引擎。SQLite是完全独立的,不具有外部依赖性。SQLite第一个Alpha版本诞生于2000年5月,至今已经有10个年头,最新版本Sqlite3已经发布。SQLite是免费开源软件。SQLite能够运行在Windows/Linux/Unix等各种操作系统,同时还能够跟其他编程语言相结合,如PHP、Python、Tcl、Java等,还有ODBC接口,SQLite支持SQL92标准。SQLIte源代 阅读全文

posted @ 2011-12-20 11:20 千兵卫博士 阅读(2359) 评论(0) 推荐(1) 编辑

linux c编程操作数据库(sqlite3应用)

摘要: C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理(创建数据库、创建表格、插入数据、查询、数据、删除数据等)。首先要编译好sqlite的库文件 : libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig可执行文件 : sqlite3本次测试: sqlite3的库文件目录是:/usr/local/lib 可执行文件 sqlite3 的目录是: /usr/local/bin 头文件 sqlite3.h 的目录是: /usr/local/include用ls命令查看如 阅读全文

posted @ 2011-12-20 10:49 千兵卫博士 阅读(406) 评论(0) 推荐(2) 编辑

2011年12月18日

linux 4位权限分别代表意思

摘要: 接触linux一段时间了,有个权限问题让我一直郁闷。网上也没找到(估计是关键字不对),就是这个0777,最前面的0是什么意思。最近看到一本书(Linux与unix shell编程指南),终于找到答案了。 先说一下777什么意思吧,linux下文件权限分为所属用户权限、所属组权限和其他权限。 每一个又分为r(读)w(写)x(可执行)。如果你在linux中运行 ls -l就会显示权限如: Java代码 -rwxr-xr-x 1 root root 12 09-02 15:21 my_test.sh “-”表示文件类型不用管。第一个rwx是所属用户的权限,表示所属用户(root)对本文件可读(r)可 阅读全文

posted @ 2011-12-18 19:43 千兵卫博士 阅读(1015) 评论(0) 推荐(0) 编辑

2011年12月15日

UNIX进程组,会话期,作业控制

摘要: 在UNIX系统中,作业控制允许在一个终端上启动多个作业(进程组),控制哪一个作业可以存取该终端,以及哪些作业在后台运行。为了支持作业控制,引入了进程组,会话期,控制终端等概念,还需要内核以一定的信号支持。一·进程组。 每一个进程除了有一个进程PID之外,还属于一个进程组,用进程组ID表示。返回当前进程组ID的系统调用为:pid_t getpgrp();每个进程组都有一个组长进程,组长进程的标识是进程组ID等于其进程ID。 进程可以调用setpgid系统调用参加一个现存的组或者创建一个新的进程组。int setpgid(pid_t pid, pid_t pgid);这将pid进程的进程 阅读全文

posted @ 2011-12-15 13:58 千兵卫博士 阅读(895) 评论(2) 推荐(1) 编辑

基于Linux守护进程的分析与实现

摘要: 摘要:针对Linux环境下的守护进程daemon,分析了一般性守护进程的编写方法,并提出若干见解,通过总结归纳进而为设计和开发守护进程提供了有意的参考,给出了基于Linux守护进程实现的主要思想。关键词: 守护进程;信号量;控制终端 1 引言 Linux在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。提供这些服务的程序是由运行在后台的守护进程(Daemons)来执行的。 编写守护进程实际上是把一个普通进程按照守护进程的特性进行改造。比如,网络通信服务中的守护进程需要能同时接受多个请求,它不断地在侦听端等待远程的 连接请求,收... 阅读全文

posted @ 2011-12-15 11:04 千兵卫博士 阅读(1334) 评论(0) 推荐(0) 编辑

2011年12月13日

linux下socket keep alive讲解

摘要: 【需求】不影响服务器处理的前提下,检测客户端程序是否被强制终了。【现状】服务器端和客户端的Socket都设定了keepalive属性。服务器端设定了探测次数等参数,客户端、服务器只是打开了keepalive机能服务器端起了一个监视线程,利用select来检测socket是否被关闭。。。下面这是我的一点肤浅理解。1.关于keep alive无论windows,还是linux,keepalive就三个参数:sk->keepalive_probes:探测次数sk->keepalive_time 探测的超时sk->keepalive_intvl 探测间隔对 于一个已经建立的tcp连接 阅读全文

posted @ 2011-12-13 14:25 千兵卫博士 阅读(5451) 评论(2) 推荐(0) 编辑

2011年11月28日

sockaddr_in中的sin_family=PF_INET是什么意思?(转)

摘要: sockaddr_in中的sin_family=PF_INET是什么意思?sin_family还有别的值吗?如果有都有什么?这些其他的值都是什么意思?你可以直接看定义所在的winsock.h啊 AF_INET是internet地址族,包括了tcp、udp什么的, IPX、pipe什么的就不用AF_INET这个值PF_INET与AF_INET究竟有什么不同?实际上,原来的想法是每个通信域(如PF_INET)可能对应多个协议(如AF_INET),而事 实上支持多个协议的通信域一直没有实现。因此,在linux内核中,AF_***与PF_***被定义为同一个常数,因此,在编程时可以不加区分地使用他 . 阅读全文

posted @ 2011-11-28 13:52 千兵卫博士 阅读(850) 评论(0) 推荐(0) 编辑

转载:Linux下的段错误产生的原因及调试方法

摘要: 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.一些注意事项1、出现段错误时,首先应该想到段错误的定义,从它出发考虑引发错误的原因。2、在使用指针时,定义了指针后记得初始化指针,在使用的时候记得判断是否为NULL。3、在使用数组时,注意数组是否被初始化,数组下标是否越界,数组元素是否存在等。4、在访问变量时,注意变量所占地址空间是否已经被程序释放掉。5、在处理变量时,注意变量的格式控制是否合理等。一般 来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位的寄存器,其中的 阅读全文

posted @ 2011-11-28 10:54 千兵卫博士 阅读(298) 评论(0) 推荐(1) 编辑

导航