10 2010 档案

摘要:import structpack、unpack、pack_into、unpack_from# ref: http://blog.csdn.net/JGood/archive/2009/06/22/4290158.aspximport struct#pack - unpackprintprint '===== pack - unpack ====='str = struct.pack("ii", 20, 400)print 'str:', strprint 'len(str):', len(str) # len(str): 8 阅读全文
posted @ 2010-10-29 13:36 Springside4 阅读(172) 评论(0) 推荐(0) 编辑
摘要:一、 线程池的原理: 线程池,究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求,当处理完这个请求后,线程又处于睡眠状态。可能你也许会问:为什么要搞得这么麻烦,如果每当客户端有新的请求时,我就创建一个新的线程不就完了?这也许是个不错的方法,因为它能使得你编写代码相对容易一些,但你却忽略了一个重要的问题——性能!就拿我所在的单位来说,我的单位是一个省级数据大集中的银行网络中心,高峰期每秒的客户端请求并发数超过100,如果为每个 阅读全文
posted @ 2010-10-29 11:17 Springside4 阅读(2441) 评论(0) 推荐(0) 编辑
摘要:select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1024上限问题,一个处理多个用户的进程,fd值远远大于1024所以这个时候应该采用poll,poll传递的是数组头指针和该数组的长度,只要数组的长度不是很长,性能还是很不错的,因为poll一次在内核中申请4K(一个页的大小来 阅读全文
posted @ 2010-10-28 14:20 Springside4 阅读(211) 评论(0) 推荐(0) 编辑
摘要:select函数: 系统提供select函数来实现多路复用输入/输出模型。原型: #include <sys/time.h> #include <unistd.h> select函数: 系统提供select函数来实现多路复用输入/输出模型。原型: #include <sys/time.h> #include <unistd.h> int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout); 参数maxfd是需要监视的最大的文件描述符 阅读全文
posted @ 2010-10-28 13:42 Springside4 阅读(130) 评论(0) 推荐(0) 编辑
摘要:简介:软件的测试是一件非常乏味的事情,在测试别人编写的软件时尤其如此,程序员通常都只对编写代码感兴趣,而不喜欢文档编写和软件测试这类"没有创新"的工作。既然如此,为什么不让程序员在编写软件时自己加入一些用于测试的代码,使测试过程自动化呢?在软件工程中,这一技术称为自动单元测试,本文介绍在用Python开发软件时如何实现这一目标。一、软件测试大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件测试则是保证质量的关键措施。正像软件熵(software entropy)所描述的那样:一个程序从设计很好的状 阅读全文
posted @ 2010-10-27 17:48 Springside4 阅读(167) 评论(0) 推荐(0) 编辑
摘要:Pythonunittest模块的相关用法待测源码类:widget.py#!/usr/bin/env pythonclass Widget: def __init__(self, size = (40, 40)): self._size = size def getSize(self): return self._size def resize(self, width, height): if width == 0 or height < 0: raise ValueError, "illegal size" ... 阅读全文
posted @ 2010-10-27 17:45 Springside4 阅读(143) 评论(0) 推荐(0) 编辑
摘要:代码: #! /usr/bin/python# Filename: inherit.py# Author: yanggangclass SchoolMember: def __init__(self,name,age): self.name = name self.age = age print 'init SchoolMember: ', self.name def tell(self): print 'name:%s; age:%s' % (self.name, self.age)class Teacher(SchoolM... 阅读全文
posted @ 2010-10-27 17:04 Springside4 阅读(283) 评论(0) 推荐(0) 编辑
摘要:Server:# serverimport socketaddress = ('127.0.0.1', 31500)s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # s = socket.socket()s.bind(address)s.listen(5)ss, addr = s.accept()print 'got connected from',addrss.send('byebye')ra = ss.recv(512)print rass.close()s.close()Clie 阅读全文
posted @ 2010-10-27 15:49 Springside4 阅读(196) 评论(0) 推荐(0) 编辑
摘要:Server:import socketaddress = ('127.0.0.1', 31500)s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.bind(address)while True: data, addr = s.recvfrom(2048) if not data: print "client has exist" break print "received:", data, "from", addrs.close()Client:import 阅读全文
posted @ 2010-10-27 15:38 Springside4 阅读(203) 评论(0) 推荐(0) 编辑
摘要:重剑点评: 真简单明了!复习网络编程,顺便学习python。一、套接字套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发送和接受数据。为了建立通信通道,网络通信的每个端点拥有一个套接字对象极为重要。套接字为BSD UNIX系统核心的一部分,而且他们也被许多其他类似UNIX的操作系统包括Linux所采纳。许多非BSD UNIX系统(如ms-dos,windows,os/2,mac os及大部分主机环境)都以库形式提供对套接字的支持。三种最流行的套接字类型是:stream,datagram 阅读全文
posted @ 2010-10-27 14:38 Springside4 阅读(143) 评论(0) 推荐(0) 编辑
摘要:1. 模块定义(单独显示一页)/** @defgroup 模块名 模块的说明文字* @{*/… 定义的内容 …/** @} */ // 模块结尾2. 分组定义(在一页内分组显示)/** @name 分组说明文字* @{*/… 定义的内容 …/** @} */3. 变量、宏定义、类型定义简要说明/** 简要说明文字 */#define FLOAT float/** @brief 简要说明文字(在前面加 @brief 是标准格式) */#define MIN_UINT 0/** 分行的简要说明 /n* 这是第二行的简要说明*/int b;4. 函数说明/** 简要的函数说明文字 * @param 阅读全文
posted @ 2010-10-27 11:13 Springside4 阅读(127) 评论(0) 推荐(0) 编辑
摘要:常用的网络命令:netstat命令netstat是用来显示网络的连接,路由表和接口统计等网络的信息.netstat有许多的选项我们常用的选项是 -an 用来显示详细的网络状态.至于其它的选项我们可以使用帮助telnettelnet是一个用来远程控制的程序,但是我们完全可以用这个程序来调试我们的服务端程序的. 比如我们的服务器程序在监听8888端口,我们可以用telnet localhost 8888来查看服务端的状况.linux网络编程【参考】:linux socket常用函数 http://blog.csdn.net/Sunboy_2050/archive/2010/06/12/566627 阅读全文
posted @ 2010-10-26 15:22 Springside4 阅读(228) 评论(0) 推荐(0) 编辑
摘要:现在流行的进程线程同步互斥的控制机制,其实是由最原始最基本的4种方法实现的。由这4种方法组合优化就有了.Net和Java下灵活多变的,编程简便的线程进程控制手段。 这4种方法具体定义如下 在《操作系统教程》ISBN 7-5053-6193-7 一书中可以找到更加详细的解释 1临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2互斥量:为协调共同对一个共享资源的单独访问而设计的。 3信号量:为控制一个具有有限数量用户资源而设计。 4事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。 1. 临界区(Critical Section) 保证在某... 阅读全文
posted @ 2010-10-26 13:30 Springside4 阅读(166) 评论(0) 推荐(0) 编辑
摘要:说法一:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行 说法二:进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一 阅读全文
posted @ 2010-10-26 10:34 Springside4 阅读(173) 评论(0) 推荐(0) 编辑
摘要:Linux网络编程一步一步学-异步通讯聊天程序selectClient#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <unistd.h>#include <arpa/inet.h># 阅读全文
posted @ 2010-10-25 20:26 Springside4 阅读(135) 评论(0) 推荐(0) 编辑
摘要:题目:Hello world要求:案例程序基于TCP协议,由客户程序启动后向服务器程序发送“hello world”,服务器程序显示客户机IP地址、端口、以及发送的信息。服务器将收到的字符串发送给客户端,客户端显示验证。使用方法:在linux下编译$gcc -o client client.c$gcc -o server server.c先运行server程序$./server再运行client程序$./client xxx(你要访问服务器名---非IP)程序:/* client.c */#include <stdio.h>#include <stdlib.h>#inc 阅读全文
posted @ 2010-10-17 19:34 Springside4 阅读(189) 评论(0) 推荐(0) 编辑
摘要:alarm(设置信号传送闹钟)相关函数 signal,sleep表头文件 #include<unistd.h>定义函数 unsigned int alarm(unsigned int seconds);函数说明 alarm()用来设置信号SIGALRM在经过参数seconds指定的秒数后传送给目前的进程。如果参数seconds 为0,则之前设置的闹钟会被取消,并将剩下的时间返回。返回值返回之前闹钟的剩余秒数,如果之前未设闹钟则返回0。范例 #include<unistd.h>#include<signal.h>void handler() {printf(& 阅读全文
posted @ 2010-10-16 16:17 Springside4 阅读(116) 评论(0) 推荐(0) 编辑
摘要:信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对应的事件。基本概念对于理解和使用信号,对于理解信号机制都特别重要。下面就来看看什么是信号。 1、基本概念 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调 阅读全文
posted @ 2010-10-16 14:53 Springside4 阅读(104) 评论(0) 推荐(0) 编辑
摘要:core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)在程序运行的过程中,有的时候我们会遇到Segment fault(段错误)这样的错误。这种看起来比较困难,因为没有任何的栈、trace信息输出。该种类型的错误往往与指针操作相关。往往可以通过这样的方式进行定位。一 造成segment fault,产生core dump的可能原因1.内存访问越界a) 由于使用错误的下标,导致数组访问越界b) 搜索字符串时,依 阅读全文
posted @ 2010-10-16 12:39 Springside4 阅读(144) 评论(0) 推荐(0) 编辑
摘要:find 命令在linux中是很常用到的一个查找命令,它的功能非常地强大。可以结合正则匹配来搜索系统中的指定的内容,以下我就记录一下这个find常用到的一些用法 首先我们来看看find的总体用法 find path option [-print -exec -ok] 其中path是指定在哪个路径中查找内容。如/var下查找内容,option是find中的一些属性值,常用的有-name,-type,-mtime,-ctime,-atime,-user,-group,-nouser,-nogroup,-perm等,[-print -exec -ok]是可选属性值,-print是指把查找到... 阅读全文
posted @ 2010-10-13 11:12 Springside4 阅读(143) 评论(0) 推荐(0) 编辑