群发讨红包微信公众平台群发红包筹资 “好友”开口给不给

能够查看正在运行中的线程是由哪个处理器运行的吗_操作系统_安安数码解答网
能够查看正在运行中的线程是由哪个处理器运行的吗
编辑: 安安数码解答网 &&&来源:用户发布&&&发布时间:&&&查看次数:33
帮忙看下能够查看正在运行中的线程是由哪个处理器运行的吗哈屯
【探讨解答】
cpu里的核心数量和线程数什么关系
线程,有时被称为轻量级进程,是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必...
如何查看linux线程运行在哪个cpu核上
使用top命令,具体用法是 top -H,加上这个选项,top的每一行就不是显示一个进程,而是一个线程。 使用ps命令,具体用法是 ps -xH,这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。 使用ps命令,具体用法是 ps -mq PID,这样可以看...
什么是线程,如何查看线程
1.线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统...
java如何获取当前程序里有多少个正在执行的线程
参考这个问题,与你的相关 /link?url=RzmIMVXL7bWmSGQxFtVPzgT2VXQIxrCB5hTovZ77rNst9_u2CbFbxRjQWrehDYuYM-8Ck7uYaJH6h2TQTzRx1q
在多核CPU下,同一进程下的多个线程可以并行运行吗
CPU在某一个时间点上确实只能执行一个线程,但是多线程不是由于多核或者双核才叫多线程。 是由于,很多个线程在并行执行的时候,CPU根据一定的线程调度算法,频繁的进行线程切换,当正在执行的一个线程需要进行IO操作或者需要访问内存的时候,CP...
操作系统相关
更多相关内容
本站内容来自网友发布,本站无法保证其部分内容的正确性,请用户一定仔细辨别。
[] &&[联系QQ:885&971&98] &
沪ICP备号&新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 26, 距离下一级还需 174 积分
论坛徽章:0
如题!如何查看线程跑在哪个cpu核上?
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
论坛徽章:4
这个没法查看吧,系统调度的……根据cpu情况决定线程运行数量和情况 - coach - ITeye技术网站
博客分类:
一个线程分配器,根据cpu的负载情况,自动完成对应线程的唤醒或者是等待操作。整个过程是一个平滑的过程,不会因为线程的切换而导致机器负载出线锯齿。
读取Linux系统TOP等指令拿到系统当前负载
package temp.
import java.io.BufferedR
import java.io.InputStreamR
* @description 节点的cpu 内存 磁盘空间 情况
* @version 1.0
public class NodeLoadView
* 获取cpu使用情况
* @throws Exception
public double getCpuUsage() throws Exception
double cpuUsed = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("/usr/bin/uptime");// 调用系统的"top"命令
String[] strArray =
BufferedReader in =
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str =
while ((str = in.readLine()) != null)
strArray = str.split("load average: ");
strArray = strArray[1].split(",");
cpuUsed = Double.parseDouble(strArray[0]);
catch (Exception e)
e.printStackTrace();
in.close();
return cpuU
* 内存监控
* @throws Exception
public double getMemUsage() throws Exception
double menUsed = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("top -b -n 1");// 调用系统的"top"命令
BufferedReader in =
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str =
String[] strArray =
while ((str = in.readLine()) != null)
int m = 0;
if (str.indexOf(" R ") != -1)
{// 只分析正在运行的进程,top进程本身除外 &&
// System.out.println("——————3—————–");
strArray = str.split(" ");
for (String tmp : strArray)
if (tmp.trim().length() == 0)
if (++m == 10)
// 9)–第10列为mem的使用百分比(RedHat 9)
menUsed += Double.parseDouble(tmp);
catch (Exception e)
e.printStackTrace();
in.close();
return menU
* 获取磁盘空间大小
* @throws Exception
public double getDeskUsage() throws Exception
double totalHD = 0;
double usedHD = 0;
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("df -hl");// df -hl 查看硬盘空间
BufferedReader in =
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String str =
String[] strArray =
while ((str = in.readLine()) != null)
int m = 0;
// if (flag & 0) {
// flag++;
strArray = str.split(" ");
for (String tmp : strArray)
if (tmp.trim().length() == 0)
// System.out.println("—-tmp—-" + tmp);
if (tmp.indexOf("G") != -1)
if (m == 2)
// System.out.println("—G—-" + tmp);
if (!tmp.equals("") && !tmp.equals("0"))
totalHD += Double.parseDouble(tmp.substring(0, tmp.length() - 1)) * 1024;
if (m == 3)
// System.out.println("—G—-" + tmp);
if (!tmp.equals("none") && !tmp.equals("0"))
usedHD += Double.parseDouble(tmp.substring(0, tmp.length() - 1)) * 1024;
if (tmp.indexOf("M") != -1)
if (m == 2)
// System.out.println("—M—" + tmp);
if (!tmp.equals("") && !tmp.equals("0"))
totalHD += Double.parseDouble(tmp.substring(0, tmp.length() - 1));
if (m == 3)
// System.out.println("—M—" + tmp);
if (!tmp.equals("none") && !tmp.equals("0"))
usedHD += Double.parseDouble(tmp.substring(0, tmp.length() - 1));
// System.out.println("—-3—-" + usedHD);
catch (Exception e)
e.printStackTrace();
in.close();
return (usedHD / totalHD) * 100;
public static void main(String[] args) throws Exception
NodeLoadView cpu = new NodeLoadView();
System.out.println("—————cpu used:" + cpu.getCpuUsage() + "%");
System.out.println("—————mem used:" + cpu.getMemUsage() + "%");
System.out.println("—————HD used:" + cpu.getDeskUsage() + "%");
System.out.println("————jvm监控———————-");
Runtime lRuntime = Runtime.getRuntime();
System.out.println("————–Free Momery:" + lRuntime.freeMemory() + "K");
System.out.println("————–Max Momery:" + lRuntime.maxMemory() + "K");
System.out.println("————–Total Momery:" + lRuntime.totalMemory() + "K");
System.out.println("—————Available Processors :" + lRuntime.availableProcessors());
package temp.
import java.util.M
import org.apache.log4j.L
* @description
* @version 1.0
public class ThreadScheduler
private static Logger logger = Logger.getLogger(ThreadScheduler.class.getName());
private Map&String, Thread& runningThreadM
private Map&String, Thread& waitingThreadM
private boolean isFinished =
private int runningS
public ThreadScheduler(Map&String, Thread& runningThreadMap, Map&String, Thread& waitingThreadMap)
this.runningThreadMap = runningThreadM
this.waitingThreadMap = waitingThreadM
this.runningSize = waitingThreadMap.size();
* 开始调度线程
* @author zhen.chen
* @createTime
上午11:04:52
public void schedule()
long sleepMilliSecond = 1 * 1000;
int allowRunThreads = 15;
// 一次启动的线程数,cpuLoad变大时以此值为参考递减
int allowRunThreadsRef = 15;
double cpuLoad = 0;// 0-15
NodeLoadView load = new NodeLoadView();
while (true)
cpuLoad = load.getCpuUsage();
catch (Exception e1)
e1.printStackTrace();
// cpuLoad低 启动的线程多
allowRunThreads = (int) Math.floor(allowRunThreadsRef - cpuLoad);
// threads不能为0
if (allowRunThreads & 1)
allowRunThreads = 1;
if (allowRunThreads & allowRunThreadsRef)
allowRunThreads = allowRunThreadsR
if (logger.isDebugEnabled())
logger.debug("[ThreadScheduler]running Thread:" + runningThreadMap.size() + "; waiting Thread:" + waitingThreadMap.size() + "; cpu:" + cpuLoad + " allowRunThreads:" + allowRunThreads);
// 检查等待线程runningSize个线程的情况,满足条件则启动
for (int x = 0; x & runningS x++)
if (waitingThreadMap.get(x + "") != null)
if (allowRunThreadsRef &= runningThreadMap.size())
synchronized (waitingThreadMap.get(x + ""))
if (!waitingThreadMap.get(x + "").isAlive())
waitingThreadMap.get(x + "").start();
waitingThreadMap.get(x + "").notify();
runningThreadMap.put(x + "", waitingThreadMap.get(x + ""));
waitingThreadMap.remove(x + "");
// 检查runningSize个线程的情况,满足条件则暂停
for (int x = 0; x & runningS x++)
if (runningThreadMap.size() &= allowRunThreads)
if (runningThreadMap.get(x + "") != null)
synchronized (runningThreadMap.get(x + ""))
if (runningThreadMap.get(x + "").isAlive())
runningThreadMap.get(x + "").wait();
catch (InterruptedException e)
e.printStackTrace();
waitingThreadMap.put(x + "", runningThreadMap.get(x));
runningThreadMap.remove(x + "");
// 全部跑完,返回
if (waitingThreadMap.size() == 0 && runningThreadMap.size() == 0)
if (logger.isDebugEnabled())
logger.debug("[ThreadScheduler] over.total Threads size:" + runningSize);
this.isFinished =
// 使主while循环慢一点
Thread.sleep(sleepMilliSecond);
catch (InterruptedException e1)
e1.printStackTrace();
public boolean isFinished()
return isF
这个类的作用:
1.接收runningThreadMap和waitingThreadMap两个map,里面对应存了运行中的线程实例和等待中的线程实例。
2.读cpu情况,自动判断要notify等待中的线程还是wait运行中的线程。
3.两个map都结束,退出。(必须runningThreadMap内部的Thread自己将runningThreadMap对应的Thread remove掉)
使用:
package temp.
import java.util.HashM
import java.util.M
* @description
* @version 1.0
public class TestThread
public static class Runner extends Thread
public Runner(int j, Map&String, Thread& threadMap)
public void run()
// TODO 你的逻辑 完成后需要从threadMap中remove掉
public static void main(String[] args)
// 运行中的线程
Map&String, Thread& threadMap = new HashMap&String, Thread&();
// 正在等待中的线程
Map&String, Thread& waitThreadMap = new HashMap&String, Thread&();
for (int j = 0; j & args. j++)
Thread t = new Runner(j, threadMap);
waitThreadMap.put(j + "", t);
ThreadScheduler threadScheduler = new ThreadScheduler(threadMap, waitThreadMap);
threadScheduler.schedule();
if (threadScheduler.isFinished() == false)
// 没能正常结束
浏览: 260135 次
来自: 印度
可以看看这篇文章,这个是struts教程网上一个简单的例子,构 ...
菜鸟不再菜 写道楼主很明显没有说明守护线程到底是怎么服务Use ...
要搞个executor和nio的结合,差不多
纠正楼主一个问题‘如果四个队员都在忙时,再有新的任务,这个小组 ...

我要回帖

更多关于 微信群发红包 的文章

 

随机推荐