- 博客(39)
- 资源 (12)
- 收藏
- 关注
转载 多线程&多进程解析:Python、os、sys、Queue、multiprocessing、threading
当涉及到操作系统的时候,免不了要使用os模块,有时还要用到sys模块。设计到并行程序,一般开单独的进程,而不是线程,原因是python解释器的全局解释器锁GIL(global interpreter lock),本文最后会讲到。使用进程可以实现完全并行,无GIL的限制,可充分利用多cpu多核的环境。 os/sys模块1、os模块os.system() 函数可以启动一个进程,执行
2017-02-28 15:23:22 1495
转载 linux进程间的通信(C): 共享内存
一、共享内存介绍共享内存是三个IPC(Inter-Process Communication)机制中的一个。它允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式。大多数的共享内存的实现,都把由不同进程之间共享的内存安排为同一段物理内存。共享内存是由IPC为进程创建一个特殊的地址范围,
2017-02-28 14:59:37 452
转载 python 多线程为什么鸡肋?
什么是全局解释器锁GILPython代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。在多线程环境中,Python 虚拟机按以下方式执行:
2017-02-27 14:38:31 2699
转载 死锁的产生、预防和避免
死锁是由于并发进程只能按互斥方式访问临界资源等多种因素引起的,并且是一种与执行时间和速度密切相关的错误现象。死锁的一般定义:若在一个进程集合中,每一个进程都在等待一个永远不会发生的事件而形成一个永久的阻塞状态,这种阻塞状态就是死锁。死锁的产生条件:1.互斥(mutual exclusion):系统存在着临界资源;2.占有并等待(hold and wait):已经得到某些资源的进
2017-02-23 14:25:18 721
转载 Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些有关问题
Operating System-Thread(5)弹出式线程&&使单线程代码多线程化会产生那些问题本文主要内容弹出式线程(Pop-up threads)使单线程代码多线程化会产生那些问题一、弹出式线程(Pop-up threads)以在一个http到达之后一个Service的处理为例子来介绍弹出式线程。上面的例子中传统的做法有可能是在Service中有一个线程一直在等
2017-02-22 11:43:26 678
转载 中断和异常,陷阱的区别和联系
对于中断,异常和陷阱的各种关系,总结如下:表 2.1. 中断,异常和陷阱的区别和联系 对CPU来说是和当前CPU所执行的指令的关系CPU接下来的事情程序员和用户的态度中断被动的异步的没关系跳转到对应的ISR希望有对应的中断,以使得CPU可以响应对应的中断,执行对应的ISR异常被动的同步的
2017-02-20 11:05:05 14612
转载 进程控制:进程的创建、终止、阻塞、唤醒和切换
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。进程的创建允许一个进程创建另一个进程。此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进
2017-02-20 10:47:14 6123
转载 bash shell脚本访问PostgreSQL的三种方式
bash脚本里有三种方式访问PostgreSQL数据库但前提是要设置密码文件。当然对于有系统对应账户的数据库角色可以绕过密码登录环节,如1$ sudo-u postgres psql或12$ sudosu - postgres$ psql
2017-02-17 14:13:22 28815 2
转载 inline用法详解
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,
2017-02-15 16:24:20 795
转载 1.6.4 分离原则: 策略同机制分离,接口同引擎分离
在Unix之失的讨论中,我们谈到过X系统的设计者在设计中的基本抉择是实行“机制,而不是策略”这种做法——使X成为一个通用图形引擎,而将用户界面风格留给工具包或者系统的其它层次来决定。这一点得以证明是正确的,因为策略和机制是按照不同的时间尺度变化的,策略的变化要远远快于机制。GUI工具包的观感时尚来去匆匆,而光栅操作和组合却是永恒的。所以,把策略同机制揉成一团有两个负面影响:一来会使策略变得
2017-02-15 11:54:12 1127
转载 每天一个linux命令(41):ps命令
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在
2017-02-14 18:41:30 430
转载 Linux信号处理机制
在Linux中,信号是进程间通讯的一种方式,它采用的是异步机制。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。需要说明的是,信号只是用于通知进程发生了某个事件,除了信号本身的信息之外,并不具备传递用户数据的功能。1 信号的响应动作每个信号都有自己的响应动作,当接收到信号时,进程会根据信号的响应动作执行相应
2017-02-14 18:34:23 464
转载 fork source exec区别差异
fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process, 但 parent process 的环境是不会因 child process 的改变而改变的. source 使用 source
2017-02-14 17:32:15 480
转载 shell中exec解析
exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。 在说明ex
2017-02-14 17:16:31 858
转载 Linux系统调用过程分析
参考:《Linux内核设计与实现》0 摘要linux的系统调用过程:层次如下:用户程序------>C库(即API):INT 0x80 ----->system_call------->系统调用服务例程-------->内核程序先说明一下,我们常说的用户API其实就是系统提供的C库。系统调用是通过软中断指令 INT 0x80 实现的,而这条INT 0x80指
2017-02-14 16:37:31 644
转载 C++静态库与动态库
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库
2017-02-13 16:16:25 529
转载 函数名/函数地址/函数指针
转自:http://hi.baidu.com/%C6%BF%D6%D0%B5%C4%C5%AE%CE%D7/blog/item/387db9ddaa54d0a9cd1166fa.html函数指针:1。指针变量 2。指针变量指向函数这正如用指针变量可指向整型变量、字符型、数组一样。在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。可
2017-02-13 15:45:28 4867 3
转载 linux 动态库文件stripped属性理解
在centos 6.2下用file命令查看文件信息的时候,显示如下:libcom_err.so.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, strippedlibcrypto.so.10: ELF 64-bit LSB shared object, x8
2017-02-12 11:17:57 2484
转载 Linux字符界面和图形界面
Ubuntu图形界面和字符界面的切换Ubuntu和其他的Linux系统一样,有图形界面和字符界面,同时能够设置默认的启动界面。linux的显示界面分为命令行的字符界面和图形界面,我们可以设置linux的默认启动的显示界面。然后也可以手动的来回的切换。在图形界面中的Ubuntu可以利用Ctrl+Alt+t开启一个新的终端,但是在字符界面需要开启多个命令行的话,具体的操作就是:
2017-02-12 10:51:16 7236
转载 C++ 内存对齐
注:本文代码测试环境为win7 X64 cpu, 编译器为gcc4.7.1 和 vs2010 内存对齐是编译器为了便于CPU快速访问而采用的一项技术我们先从一个例子开始,对下面的类(或者结构体)class node{char c;int i;short s;}no;sizeof(no)的值是多少呢,如果你的回答是7(1+4
2017-02-11 15:37:16 339
转载 配置Ubuntu Server高速apt-get源
今天刚装上Ubuntu Server 12,默认的apt-get源比较慢。更改一下源地址。方法:1、修改源地址:cp /etc/apt/sources.list /etc/apt/sources.list.bakvim /etc/apt/sources.list加入如下内容(中科大的):deb http://mirrors.ustc.edu.cn/ubuntu/ p
2017-02-09 23:07:07 2907
转载 C编译器、链接器、加载器详解
一、概述C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可加载、可执行代码的过程。过程图解如下: 预处理器:将.c 文件转化成 .i文件,使用的gcc命令是:gcc –
2017-02-09 10:36:18 969
转载 Linux strace命令
简介strace常用来跟踪进程执行时的系统调用和所接收的信号。 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。输出参数含义root@ubuntu:/usr# strac
2017-02-09 10:28:32 294
转载 Linux/arch/arm/include/asm/unistd.h
1 /* 2 * arch/arm/include/asm/unistd.h 3 * 4 * Copyright (C) 2001-2005 Russell King 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the te
2017-02-08 20:08:24 3020
转载 gdb调试命令
本文主要参考自:http://www.cnblogs.com/zzx1045917067/archive/2012/12/26/2834310.html,进行了一点补充和编排;Core dump部分参考了:http://blog.ddup.us/?p=176。 gdb是一个在UNIX环境下的命令行调试工具。 如果需要使用gdb调试程序,请在gcc时加上-g选项。 下面的命令部
2017-02-08 17:10:39 438
转载 使用GDB调试C库
用gdb调试程序时,一般的函数都可以step进去,可是C库函数却直接跳过了。网上找了些资料,记录一下!1.安装C库的debug版本[plain] view plain copy print?sudo apt-get install libc6-dbg 安装完后,在/usr/lib目录下会多出一个debug目录,里面有安装
2017-02-08 17:06:28 1222
转载 X86汇编快速入门
本文翻译自:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令、逻辑计算指令、算数运算指令),以及函数的调用规则。个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程序。当然,更复
2017-02-08 13:28:09 2781
转载 通过一段汇编,加深对寄存器ESP和EBP的理解
一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码;假设执行函数前堆栈指针ESP为NNpush p2 ;参数2入栈, ESP -= 4h , ESP = NN - 4h
2017-02-08 10:33:24 712
转载 孤儿进程与僵尸进程[总结]
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的
2017-02-07 17:51:43 329
转载 以SYSTEM用户运行CMD
在SCCM 经常会以NT AUTHOR\SYSTEM帐户操作。 安以下步骤可以以SYSTEM帐户打开一个CMD窗口。 1. 从微软网站下载PSTool。 2. 以管理员运行CMD,进入到解压的PSTool目录。 3. 运行psexec -i -s cmd.exe 4. 在新打开的CMD中运
2017-02-07 17:35:38 8702 2
转载 汇编语言学习笔记(十二)-浮点指令
浮点数如何存储浮点寄存器浮点数指令浮点计算例子浮点高级运算CMOV移动指令浮点数如何存储浮点数的运算完全不同于整数,从寄存器到指令,都有一套独特的处理流程,浮点单元也称作x87 FPU。现在看浮点数的表示方式,我们所知道的,计算机使用二进制存储数据,所表示的数字都具有确定性,那是如何表示浮点这种具有近似效果的数据呢,答案是通过科学计数,科学计数由符号,尾数和指数表示,这三部
2017-02-07 14:23:37 25577 3
转载 GDB调试及其调试脚本的使用
一、GDB调试1.1. GDB 概述GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX/Linux平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下
2017-02-07 11:16:40 2339
转载 Ubuntu 进入单用户模式—修改启动项利器
偶尔会遇到Ubuntu无法正常启动的情况,这时候需修改某些文件让系统正常启动,如果直接进入 recovery 模式,默认是文件权限只读,无法修改文件。这是我们需要进入recovery 的单用户模式,获得修改文件的权限。1、重启ubuntu,随即长按shirft进入grub菜单,或等待grub菜单的出现,如下图(图是直接从网上下的,不是我在实践过程中的环境):
2017-02-07 10:35:30 2777
转载 理解linux time命令的输出
Linux中time命令,我们经常用来计算 某个程序的运行耗时(real), 用户态cpu耗时(user), 系统态cpu耗时(sys)。例如:$ time fooreal 0m0.003suser 0m0.000ssys 0m0.004s$那么这三个时间都具体代表什么意思呢?[1] real : 表示f
2017-02-06 22:23:30 15604 1
转载 小尾数,大尾数
大尾小尾 是数据在存储器中的存储格式,INtel采用的是小尾表示,即数据的高位存储在存储器的高地址,低位存储在存储器的低地址,例如一个十六进制数据0x1234存储在内存中,那么该数据在内存中的存储格式为: 34 12 == 内存方向是 从底(左)到高(右)而大尾数据存储格式,一般存在摩托罗拉系统的XX中(忘记了) ,存储格式刚好和小相反,高位低存,低位高存,还是数据0x1234 在内存中的存储
2017-02-06 21:20:32 2929
转载 补码和原码的转化过程
在计算机系统中,数值一律用补码来表示(存储)。 主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 补码与原码的转换过程几乎是相同的。 数值的补码表示也分两种情况: (1)正数的补码:与原码相同。 例如,+9的补码是00001001。 (2)负数的补码:符
2017-02-06 17:10:35 51066 4
转载 GDB下查看内存命令(x命令)
可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示: x/ n、f、u是可选的参数。 n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义。 f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s
2017-02-06 10:49:27 2577
转载 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳转指令分三类:一、无条件跳转: JMP;二、根据 CX、ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了.根据标志位跳转的指令:JE ;等于则跳转JNE ;不等于则跳转JZ ;为 0 则跳转JNZ ;不为 0 则跳转JS ;为负则跳转
2017-02-03 11:50:13 3132
commons-beanutils等JAVA类库
2013-10-05
DFS和BFS用来干什么
2013-05-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人