cpu时间

笔记 操作系统 进程和线程

荒凉一梦 提交于 2020-02-14 08:34:19
1 进程 并行是指多个进程在同一时刻同时执行。 并发是指在一段时间内可以同时执行多个进程。 如果只有一个单核的CPU是没办法执行并行这一操作的,但是是可以并发的。只有多核的CPU才能够执行并行。 来源: CSDN 作者: x1131230123 链接: https://blog.csdn.net/x1131230123/article/details/104297138

Python中使用多进程来实现并行处理的方法小结

依然范特西╮ 提交于 2020-02-14 00:02:35
Python中使用多进程来实现并行处理的方法小结 进程和线程是计算机软件领域里很重要的概念,进程和线程有区别,也有着密切的联系,先来辨析一下这两个概念: 1.定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 2.关系 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。 3.区别 进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。 简而言之,一个程序至少有一个进程

JavaSE学习笔记(12)---线程

北战南征 提交于 2020-02-13 23:43:46
JavaSE学习笔记(12)---线程 多线程 并发与并行 并发 :指两个或多个事件在 同一个时间段内 发生。 并行 :指两个或多个事件在 同一时刻 发生(同时发生)。 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。 而在多个 CPU 系统中,则这些可以并发执行的程序便可以分配到多个处理器上(CPU),实现多任务并行执行,即利用每个处理器来处理一个可以并发执行的程序,这样多个程序便可以同时执行。目前电脑市场上说的多核 CPU,便是多核处理器,核 越多,并行处理的程序越多,能大大的提高电脑运行的效率。 注意:单核处理器的计算机肯定是不能并行的处理多个任务的,只能是多个任务在单个CPU上并发运行。同理,线程也是一样的,从宏观角度上理解线程是并行运行的,但是从微观角度上分析却是串行运行的,即一个线程一个线程的去运行,当系统只有一个CPU时,线程会以某种顺序执行多个线程,我们把这种情况称之为线程调度。 线程与进程 进程 :是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建

Java多线程(三)

为君一笑 提交于 2020-02-13 22:35:08
个人博客 http://www.milovetingting.cn Java多线程(三) 前言 本文为学习Java相关知识所作笔记,参考以下资料: https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享! 线程基本方法 线程相关的基本方法有 wait,notify,notifyAll,sleep,join,yield 等。 线程等待(wait) 调用该方法的线程进入 WAITING 状态,只有等待另外线程的通知或被中断才会返回,需要注意的是调用 wait()方法后,会释放对象的锁。因此,wait 方法一般用在同步方法或同步代码块中。 线程睡眠(sleep) sleep 导致当前线程休眠,与 wait 方法不同的是 sleep 不会释放当前占有的锁,sleep(long)会导致线程进入 TIMED-WATING 状态,而 wait()方法会导致当前线程进入 WATING 状态 线程让步(yield) yield 会使当前线程让出 CPU 执行时间片,与其他线程一起重新竞争 CPU 时间片。一般情况下,优先级高的线程有更大的可能性成功竞争得到 CPU 时间片,但这又不是绝对的,有的操作系统对线程优先级并不敏感。 线程中断(interrupt) 中断一个线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位

查看cpu占有率

断了今生、忘了曾经 提交于 2020-02-13 21:11:58
1.查看cpu占有率 top -P 2.查看进程cpu占用率 ps -mp 3749 -o THREAD,tid,time|sort -rn|head -n 20 查看占用cpu高,且占用时间长的线程 $.线程ID转换为16进制格式 printf "%x\n" tid 3.查看java堆栈信息 su - nobody -c "/usr/java/jdk1.6.0_21/bin/jstack 3749|grep 34d8 -A 30" 34d8替换成上面转换的16进制 注意:这里要使用程序启动的用户执行此命令 使用root会提示: Unable to open socket file: target process not responding or HotSpot VM not loaded The -F option can be used when the target process is not responding 4.分析结果 来源: https://www.cnblogs.com/wuchangsoft/p/9408117.html

PHP FastCGI进程管理器PHP-FPM的架构

倾然丶 夕夏残阳落幕 提交于 2020-02-13 20:01:46
一个master进程,支持多个pool,每个pool由master进程监听不同的端口,pool中有多个worker进程. 每个worker进程都内置PHP解释器,并且进程常驻后台,支持prefork动态增加. 每个worker进程支持在运行时编译脚本并在内存中缓存生成的opcode来提升性能. 每个worker进程支持配置响应指定请求数后自动重启,master进程会重启挂掉的worker进程. 每个worker进程能保持一个到MySQL/Memcached/Redis的持久连接,实现"连接池",避免重复建立连接,对程序透明. 使用数据库持久连接时应该设置固定数量的worker进程数,不要使用动态的prefork模式. 经 @syaokun219 和 @IM鑫爷 纠正,以下两句有误: master进程采用epoll模型异步接收和分发请求,listen监听端口,epoll_wait等待连接. 然后分发给对应pool里的worker进程,worker进程accept请求后poll处理连接. 应该是: master进程并不接收和分发请求,而是worker进程直接accept请求后poll处理. master进程不断调用epoll_wait和getsockopt是用来异步处理信号事件和定时器事件. 这里提一下,Nginx也类似,master进程并不处理请求,而是worker进程直接处理,

Linux下高cpu占有率的调试方案

老子叫甜甜 提交于 2020-02-13 15:28:17
1.用top命令查看哪个进程占用CPU高 gateway网关进程14094占用CPU高达891%,这个数值是进程内各个线程占用CPU的累加值。 2.用top -H -p pid命令查看进程内各个线程占用的CPU百分比 #top -H -p 14094 top中可以看到有107个线程,但是下面9个线程占用CPU很高,下面以线程14086为主,分析其为何high CPU 3.使用gstack命令查看进程中各线程的函数调用栈 #gstack 14094 > gstack.log 在gstack.log中查找线程ID14086,由于函数栈会暴露函数细节,因此只显示了两个函数桢,线程ID14086对应线程号是37 Thread 37 (Thread 0x4696ab90 (LWP 14086)): #0 0x40000410 in __kernel_vsyscall () #1 0x40241f33 in poll () from /lib/i686/nosegneg/libc.so.6 4.使用gcore命令转存进程映像及内存上下文 #gcore 14094 该命令生成core文件core.14094 5。用strace命令查看系统调用和花费的时间 #strace -T -r -c -p 14094 -c参数显示统计信息,去掉此参数可以查看每个系统调用话费的时间及返回值。 6

线上问题:如何定位解决CPU高占有率

冷暖自知 提交于 2020-02-13 09:00:00
(原文转自: http://www.blogjava.net/hankchen ) 以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。 根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。 通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢? 首先显示线程列表 : ps -mp pid -o THREAD,tid,time 找到了耗时最高的线程28802,占用CPU时间快两个小时了! 其次将需要的线程ID转换为16进制格式: printf "%x\n" tid 最后打印线程的堆栈信息: jstack pid |grep tid -A 30 找到出现问题的代码了! 现在来分析下具体的代码:ShortSocketIO.readBytes(ShortSocketIO.java:106) ShortSocketIO是应用封装的一个用短连接Socket通信的工具类。readBytes函数的代码如下: public byte[] readBytes(int length) throws IOException { if ((this.socket == null) || (!this.socket.isConnected())) { throw new IOException(

VisualVM使用

妖精的绣舞 提交于 2020-02-12 23:09:05
VisualVM是JDK自带的一个用于Java程序性能分析的工具 在JDK安装目录的bin文件夹下名称为 jvisualvm.exe 在左侧选择应用 (1)概述 应用程序和运行时环境的基本信息 基本参数 PID:应用程序的进程ID 主机:应用程序运行的系统地址 主类:运行了main方法的类 参数:应用启动时所传递的参数信息 JVM:当前的JVM信息 Java:当前使用的JDK信息 Java Home:JDK的位置 JVM标志:启动JDK时JVM使用的的标志 出现OOME时生产堆dump:当前出现OOME时生产堆dump功能的开启/禁用状态 保存的数据   显示VisualVM存储的当前应用程序的信息 详细信息   JVM参数:配置的JVM启动的参数信息   系统属性 :JVM运行的系统属性 (2)监视   展示监听的当前应用程序的整体情况 CPU:CPU的使用百分比 内存:内存的占用情况,包括内存大小、最大值和已经使用的大小   堆:堆内存的大小和堆内存使用情况   Metaspace:元空间内存的使用情况 类:显示了已经加载的类数量和共享类的数量 线程:显示了应用程序在JVM中生存和守护线程的数量 堆dump:执行堆dump,在新的标签页打开,查看dump的详细信息 (3)线程 展示了应用程序的线程数据,包括所有线程数、活动线程数、完成线程数 线程dump:执行线程dump

clock()、time()、clock_gettime()和gettimeofday()函数的用法和区别

故事扮演 提交于 2020-02-12 15:50:50
转自http://blog.sina.com.cn/s/blog_790f5ae10100rwd3.html 一)ANSI clock函数 1)概述: clock 函数的返回值类型是clock_t,它除以CLOCKS_PER_SEC来得出时间,一般用两次clock函数来计算进程自身运行的时间. ANSI clock有三个问题: 1)如果超过一个小时,将要导致溢出. 2)函数clock没有考虑CPU被子进程使用的情况. 3)也不能区分用户空间和内核空间. 所以clock函数在linux系统上变得没有意义. 2)测试 编写test1.c程序,测试采用clock函数的输出与time程序的区别. vi test1.c #include <stdio.h> #include <stdlib.h> #include <time.h> int main( void ) { long i=1000L; clock_t start, finish; double duration; printf( "Time to do %ld empty loops is ", i ); start = clock(); while (--i){ system("cd"); } finish = clock(); duration = (double)(finish - start) / CLOCKS_PER