15 GIL 全局解释器锁 C语言解决 top ps
1.GIL 全局解释器锁:保证同一时刻只有一个线程在运行。
什么是全局解释器锁GIL(Global Interpreter Lock)
Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。
对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。
1)主线程死循环
#主线程死循环,占满cpu
while True:
pass

2)2个线程死循环
#-*- coding:utf-8 -*-
import threading #子线程死循环
def test():
while True:
pass t1 = threading.Thread(target=test)
t1.start() #主线程死循环
while True:
pass



- python中多线程实际是假的,效率还没有多进程高
3)2个进程实现死循环
import multiprocessing def deadLoop():
while True:
pass #子进程死循环
p1 = multiprocessing.Process(target=deadLoop)
p1.start() #主进程死循环
deadLoop()

2.C语言解决多线程下的GIL问题
1)test.c 执行流程
#include "stdio.h" int main()
{
printf("hello world\n");
return 0;
}
- gcc 生成a.out文件
python@ubuntu:~/python06/06-GIL/01-用c语言来解决GIL问题$ gcc test.c
python@ubuntu:~/python06/06-GIL/01-用c语言来解决GIL问题$ ls
a.out test.c
- ./a.out 执行程序
python@ubuntu:~/python06/06-GIL/01-用c语言来解决GIL问题$ ./a.out
hello world
2)解决问题:循环用c语言来写
### read.me 文件
把一个c语言文件编译成一个动态库的命令(linux平台下):
gcc xxx.c -shared -o libxxxx.so
- 1.c语言写loop循环
### loop.c 文件
void DeadLoop()
{
while(1)
{
;
}
}
- 2.执行命令生成库文件
gcc loop.c -shared -o libdeadloop.so .
├── libdeadloop.so
├── loop.c
├── main.py
└── read.me
- 3.加载动态库
### main.py 文件
from ctypes import *
from threading import Thread #加载动态库
lib = cdll.LoadLibrary("./libdeadloop.so") #创建一个子线程,让其执行c语言编写的函数,此函数是一个死循环
t = Thread(target=lib.DeadLoop)
t.start() #主线程,也调用c语言编写的那个死循环函数
#lib.DeadLoop() while True:
pass
- 4.执行 python3 main.py ,查看多线程下的

3.htop top 实时进程查看器
htop 是Linux系统中的一个互动的进程查看器,一个文本模式的应用程序(在控制台 或者X终端中),需要ncurses。 与Linux传统的top相比,htop更加人性化。它可让用户交互式操作,支持颜色主题,可横向或纵向滚动浏览进程列表,并支持鼠标操作。
与top相比,htop有以下优点:
- 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
- 在启动上,比top 更快。
- 杀进程时不需要输入进程号。
- htop 支持鼠标操作。
- top 已经很老了。

4.ps 一次性进程查看命令
ps 命令就是最基本同时也是非常强大的进程查看命令。 使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。 总之大部分信息都是可以通过执行该命令得到的。
ps 为我们提供了进程的一次性的查看,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。
kill 命令用于杀死进程。




15 GIL 全局解释器锁 C语言解决 top ps的更多相关文章
- 【转】进程、线程、 GIL全局解释器锁知识点整理
转自:https://www.cnblogs.com/alex3714/articles/5230609.html 本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线 ...
- Python之路-python(paramiko,进程和线程的区别,GIL全局解释器锁,线程)
一.paramiko 二.进程.与线程区别 三.python GIL全局解释器锁 四.线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生 ...
- 10 并发编程-(线程)-GIL全局解释器锁&死锁与递归锁
一.GIL全局解释器锁 1.引子 在Cpython解释器中,同一个进程下开启的多线程,同一时刻只能有一个线程执行,无法利用多核优势 首先需要明确的一点是GIL并不是Python的特性,它是在实现Pyt ...
- 网络编程之多线程——GIL全局解释器锁
网络编程之多线程--GIL全局解释器锁 一.引子 定义: In CPython, the global interpreter lock, or GIL, is a mutex that preven ...
- GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents ...
- python 并发编程 多线程 GIL全局解释器锁基本概念
首先需要明确的一点是GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念. 就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码. ...
- GIL全局解释器锁、死锁现象、python多线程的用处、进程池与线程池理论
昨日内容回顾 僵尸进程与孤儿进程 # 僵尸进程: 所有的进程在运行结束之后并不会立刻销毁(父进程需要获取该进程的资源) # 孤儿进程: 子进程正常运行 但是产生该子进程的父进程意外死亡 # 守护进程: ...
- Python自动化 【第九篇】:Python基础-线程、进程及python GIL全局解释器锁
本节内容: 进程与线程区别 线程 a) 语法 b) join c) 线程锁之Lock\Rlock\信号量 d) 将线程变为守护进程 e) Event事件 f) queue队列 g) 生 ...
- 进程、线程与GIL全局解释器锁详解
进程与线程的关系: . 线程是最小的调度单位 . 进程是最小的管理单元 . 一个进程必须至少一个线程 . 没有线程,进程也就不复存在 线程特点: 线程的并发是利用cpu上下文的切换(是并发,不是并行) ...
随机推荐
- MovieReview—The Foreigner (英伦对决)
The Foreigner's theme is revenge.The whole story is carried out in two dimensions:political struggle ...
- selenium:IE浏览器获取cookie提示Could not retrieve cookies
from selenium import webdriver url = "https://www.baidu.com" dr = webdriver.Ie() dr.get(ur ...
- python 提取字符串中的数字组成新的字符串
方法一 # 有一个字符串text = "aAsmr3idd4bgs7Dlsf9eAF" # 请将text字符串中的数字取出,并输出成一个新的字符串 import re text = ...
- Windos下Android(ADT Bundle)配置NDK的两种方法------ADT、Cygwin、NDK配置汇总(转)
转自:http://blog.csdn.net/yanzi1225627/article/details/16897877 Android开发环境由windows下ADT Bundle搭建,且按前文h ...
- OC 构造方法
#import <Foundation/Foundation.h> @interface Student : NSObject { int _age; int _no; } - (void ...
- note01-计算机网络
1.基础概述 三网: 电信网络.有线电视网络.计算机网络(连通&共享) 终端->z本地ISP->x地区IXP->y主干ISP 通信方式: C/S .P2P(即是client也 ...
- github desktop项目版本控制
[git版本控制-笔记]by lijun 0.推荐学习网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b ...
- Maven 搭建spring boot多模块项目
Maven 搭建spring boot多模块项目 备注:所有项目都在idea中创建 1.idea创建maven项目 1-1: 删除src,target目录,只保留pom.xml 1-2: 根目录pom ...
- MVC学习一:MVC简单流程
MVC学习一:MVC初次接触 1.MVC简单流程 1.1.服务器接收客户端请求后,解析URL(根据 路由表里配置的URL来分析 类名(控制器名)和方法名)根据请求的类名,创建对应的控制器类对象,并调用 ...
- shiro框架 4种授权方式 说明
1. shiro的配置文件(applicationContext-shiro.xml)中使用filterChain过滤url的方式 详细配置看注释 <?xml version="1.0 ...
