当前位置: 首页 > news >正文

建设网站费用计入什么费用app推广赚钱平台

建设网站费用计入什么费用,app推广赚钱平台,天猫开店的入驻流程,电商平台如何宣传1. 进程与线程 1.1 进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令当一个程序被运行&#xff0…

1. 进程与线程

1.1 进程与线程

进程

  • 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令
  • 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
  • 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程,也有的程序只能启动一个实例进程。

线程

  • 一个进程可以分为一到多个线程。
  • 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行。
  • Java中,线程作为最小的调度单位,在 windows 中进程是不活动的,只是作为线程的容器。

二者对比

  • 进程基本上互相独立的,而线程存在于进程内,是进程的一个子集
  • 进程拥有共享的资源,如内存空间等,供起内部的线程共享。
  • 进程间通信较为复杂
    • 同一台计算机的进程通信称为IPC(Inter-process communication)
    • 不同计算机之间的进程通信,需要通过网络,并遵循共同的协议,例如 HTTP。
  • 线程通信相对简单,因为它们共享进程的内存,一个例子是多个线程可以访问同一个共享变量。
  • 线程更轻量,线程上下文切换成本一般上要比进程上下文切换低。

1.2 并行和并发

单核CPU下,线程实际上还是串行执行的。操作系统中有一个组件叫做任务调度器,将 CPU 的时间片(windows 下时间片最小约为 15ms)分给不同的程序使用,只是由于 CPU 在线程间(时间片很短)的切换非常快。人类感觉是 同时运行的。总结就是:微观串行,宏观并行

一般会将这种(线程轮流使用CPU)的做法称为并发,concurrent。

在这里插入图片描述

多核 CPU 下,每个核(core)都可以调度运行线程,这时候线程是可以并行的。

在这里插入图片描述

引用 Rob Pike 的一段描述

  • 并发(concurrent)是同一时间对(dealing with)多件事情的能力。
  • 并行(parallel)是同一时间动手做(doing)多件事情的能力。

例子

  • 家庭主妇做饭、打扫卫生、给孩子喂奶,她一个人轮流交替做这多件事,这时就是并发
  • 家庭主妇雇了个保姆,她们一起这些事,这时既有并发,也有并行(这时会产生竞争,例如锅只有一口,一个人用锅时,另一个人就得等待)
  • 雇了3个保姆,一个专做饭、一个专打扫卫生、一个专喂奶,互不干扰,这时是并行。

1.3 应用

应用之异步调用(案例1)

以调用方角度来讲,如果

  • 需要等待结果返回,才能继续运行就是同步
  • 不需要等待结果返回,就能继续运行就是异步。

1)设计

多线程可以让方法执行变为异步的(即不要干等着)比如说读取磁盘文件时,假设读取操作花费了5秒钟,如果没有线程调度机制,这5秒 cpu 什么都做不了,其它代码都得暂停。

2)结论

  • 比如在项目中,视频文件需要转换格式等操作比较费时,这时开一个新线程处理视频转换,避免阻塞主线程。
  • tomcat 的异步 servlet 也是类似的目的,让用户线程处理耗时较长的操作,避免阻塞 tomcat 的工作线程。
  • ui 程序中,开线程进行其他操作,避免阻塞 ui 线程。

2. Java 线程

2.1 创建和运行线程

方法一,直接使用 Thread

// 创建线程对象
Thread t = new Thread() {public void run() {// 要执行的任务}
};
// 启动线程
t.start();

例如:

// 构造方法的参数是给线程指定名字,推荐
Thread t1 = new Thread("t1") {@Override// run 方法内实现了要执行的任务public void run() {log.debug("hello");}
};
t1.start();

方法二,使用 Runnable 配合 Thread

把【线程】和【任务】(要执行的代码)分开

  • Thread 代表线程
  • Runnable 可运行的任务(线程要执行的代码)
Runnable runnable = new Runnable() {public void run(){// 要执行的任务}
};
// 创建线程对象
Thread t = new Thread( runnable );
// 启动线程
t.start();

例如:

// 创建任务对象
Runnable task2 = new Runnable() {@Overridepublic void run() {log.debug("hello");}
};
// 参数1 是任务对象; 参数2 是线程名字,推荐
Thread t2 = new Thread(task2, "t2");
t2.start();

Java 8 以后可以使用 lambda 精简代码

// 创建任务对象
Runnable task2 = () -> log.debug("hello");
// 参数1 是任务对象; 参数2 是线程名字,推荐
Thread t2 = new Thread(task2, "t2");
t2.start();

原理之 Thread 和 Runnable 的关系

  • 方法1 是把线程和任务合并在了一起,方法2 是把线程和任务分开了
  • 用 Runnable 更容易与线程池等高级 API 配合
  • 用 Runnable 让任务类脱离了 Thread 继承体系,更灵活

方法三,FutureTask 配合 Thread

FutrueTask 能够接收 Callable 类型的参数,用来处理有返回结果的情况。

// 创建任务对象
FutureTask<Integer> task3 = new FutureTask<>(() -> {log.debug("hello");return 100;
});
// 参数1 是任务对象; 参数2 是线程名字,推荐
new Thread(task3, "t3").start();
// 主线程阻塞,同步等待 task 执行完毕的结果
Integer result = task3.get();
log.debug("结果是:{}", result);

2.2 查看进程线程的方法

windows

  • 任务管理器可以查看进程和线程数,也可以用来杀死进程
  • tasklist 查看进程
  • taskkill 杀死进程

linux

  • ps -fe查看所有进程
  • ps -fT -p 查看某个进程(PID)的所有线程
  • kill 杀死进程
  • top 按大写 H 切换是否显示线程
  • top -H -p 查看某个进程(PID)的所有线程

Java

  • jps 命令查看所有 Java 进程
  • jstack 查看某个Java 进程(PID)的所有线程
  • jconsole 来查看某个 Java 进程中线程的运行情况。

jconsole 远程监控配置

  • 需要以如下方式运行你的 java 类

    java -Djava.rmi.server.hostname=`ip地址` -Dcom.sun.management.jmxremote -
    Dcom.sun.management.jmxremote.port=`连接端口` -Dcom.sun.management.jmxremote.ssl=是否安全连接 -
    Dcom.sun.management.jmxremote.authenticate=是否认证 java类
    
  • 修改 /etc/hosts 文件将 127.0.01 映射至主机名

如果要认证访问,还需要做如下步骤

  • 复制 jmxremote.password 文件
  • 修改 jmxremote.password 和 jmxremote.access 文件的权限为 600 即文件所有者可读写
  • 连接时填入 controlRole(用户名),R&D(密码)

2.3 原理之线程运行

栈与栈帧

Java Virtual Machine Stacks (Java 虚拟机栈)

我们都知道 JVM 中由堆、栈、方法区所组成,其中栈内存是给谁用的呢?其实就是线程,每个线程启动后,虚拟机就会为其分配一块栈内存。

  • 每个栈由多个栈帧(Frame)组成,对应着每次方法调用时所占用的内存
  • 每个线程只能有一个活动栈帧,对应着当前正在执行的那个方法

线程上下文切换(Thread Context Switch)

因为以下一些原因导致 CPU 不再执行当前的线程,转而执行另一个线程的代码

  • 线程的 CPU 时间片用完
  • 垃圾回收
  • 有更高优先级的线程需要运行
  • 线程自己调用了 sleep 、yield、wait、join、park、synchronized、lock 等方法。

当 Context Switch 发生时,需要由操作系统保存当前线程的状态,并恢复另一个线程的状态,Java 中对应的概念就是程序计数器(Program Counter Register),它的作用是记住下一条 jvm 指令的执行地址,是线程私有的。

  • 状态包括程序计数器、虚拟机栈中每个栈帧的信息,如局部变量、操作数栈、返回地址等。
  • Context Switch 频繁发生会影响性能。
http://www.cadmedia.cn/news/4990.html

相关文章:

  • 广州网站建设排名网站如何进行网络推广
  • 客户信息管理软件青岛谷歌seo
  • 劲松网站建设公司游戏推广平台有哪些
  • 拓者设计吧邀请码seo优化多少钱
  • 英文都不懂 学网站建设维护难吗汕头网站建设平台
  • 新疆建设网个人云seo快速排名优化
  • 深圳最专业的高端网站建设重庆网站制作
  • 东西湖区建设局网站竞价账户托管公司哪家好
  • 海拉尔网页设计十大seo公司
  • 苏州商城网站建设国际最新新闻热点事件
  • 软件下载官网源码外贸网站谷歌seo
  • 广州棋牌软件开发公司seo培训中心
  • 益阳有专做网站的吗无锡谷歌推广
  • 建设项目环保验收平台网站新网站怎么做推广
  • 网上商城网站开发公司适合35岁女人的培训班
  • 招聘网站建设的项目描述搜狗推广平台
  • 网站建设属于哪个经营范围app推广一手单
  • 前程无忧网广州网站建设分类岗位网站建设企业建站
  • 成人宁波专业seo服务
  • 磨床 东莞网站建设seo网站推广服务
  • 南宁大型网站开发百度推广怎么弄
  • 关于网站图片广西网站seo
  • 建设网上银行官方网站微博营销策略
  • 婚庆公司一条龙包括哪些批量优化网站软件
  • 福州高端网站建设公司山东公司网站推广优化
  • 万网网站建设的子分类能显示多少个全国教育培训机构平台
  • 网络购物网站大全怎么去做网络推广
  • 哈尔滨服务好的建站焦作网站seo
  • 深圳开发公司网站怎么自己做网址
  • 网站建设重点是什么网络营销相关的岗位有哪些