您现在的位置是:首页» windows系统» thread.sleep让哪个线程休眠,thread的sleep函数

thread.sleep让哪个线程休眠,thread的sleep函数

2023-10-10 19:43:14
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!#程序员# 这段“垃圾”代码没有十年以上的功力应该写不出来!可能有的人会惊呼:这是什么垃圾代码?而有的人则会说:大佬牛逼,请收下我的膝盖。这段“垃圾”代码有用的就只是一行:thread.sleep(0

今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!

#程序员#

这段“垃圾”代码没有十年以上的功力应该写不出来!可能有的人会惊呼:这是什么垃圾代码?而有的人则会说:大佬牛逼,请收下我的膝盖。这段“垃圾”代码有用的就只是一行:thread.sleep(0),什么意思?有看懂的朋友吗?麻烦再下面留言![捂脸]

sleep为静态方法,让当前线程休眠

Java中线程的休眠(sleep方法)-让线程睡眠用什么方法

#程序员# 异步操作

Zainzhu

C#中的异步操作,async和await:       在没有async和await之前,怎么做异步操作,通过创建新的线程thread去操作。       有了async和await之后,就比之前简单多了:      async用来声明一个函数体,将其声明为异步方法,而await则是用在这个函数体的内部,用于等待一个异步操作的完成.      异步方法内部可以出现一个或者多个await。      Async方法在执行的时候,开始是以同步的方式执行(即在调用方的线程thread里运行),直到遇到await关键字,从await关键字开始,Csharp会另起一个线程thread来执行await后面的代码。写了个例子:       static void Main(string[] args)        {            var a = MethodAsync1();            Console.WriteLine(a.Result);            Console.Read();        }        static async Task<int> MethodAsync1()        {            return await Task.Run(() =>            {                Thread.Sleep(1000);                return 1;            });        }#程序员# #IT# #编程# #学习# #知识# #计算机#

为什么sleep不准确?主要是线程调度需要的处理时间。点击图片了解更多关于线程状态和调度的知识。

通过一个回调要求订阅者告知我们它是否取消了订阅,这是通过Subscriber.add()注册的。这个回调只有一个很简单的目的:中断线程。调用Thread.interrupt()之后,将会在sleep()中抛出InterruptedException,提前中断10秒休眠。sleep()在接收到这个异常之后,就会优雅地退出。但是,此时subscriber.isUnsubscribed()返回true,并没有发出任何事件。线程马上结束,不会浪费任何资源。你可以采用这种模式执行任意的清理工作。但是,如果流生成的是稳定、频繁的事件,那么你可能就不需要显式回调。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Threading;

namespace ConsoleApp_Thraed

{

class Program

{

public static Thread slot1;

public static Thread slot2;

static void Main(string[] args)

{

slot1 = new Thread(Slot1);

slot1.Start();

slot2 = new Thread(Slot2);

slot2.Start();

Console.Read();

}

static void Slot1()

{

#region

Thread th = new Thread(newThread);

th.Start();

Thread.Sleep(1000);

Console.WriteLine("Slot1 Thread Start!");

Console.WriteLine("Slot1 Thread Start!");

Console.WriteLine("Slot1 Thread Start!");

Console.WriteLine("Slot1 Thread Start!");

Console.WriteLine("Slot1Thread Start!");

Console.WriteLine("+++++++Slot1+++++++++!");

#endregion

Console.Read();

}

static void newThread()

{

//#endregion

Console.WriteLine("new newThread Start!");

Console.WriteLine("=======================");

Thread.Sleep(10000);

Console.Read();

}

static void Slot2()

{

#region

Thread th = new Thread(newThread);

th.Start();

Thread.Sleep(100);

Console.WriteLine("Slot2 Thread Start!");

Console.WriteLine("Slot2 Thread Start!");

Console.WriteLine("Slot2 Thread Start!");

Console.WriteLine("Slot2 Thread Start!");

Console.WriteLine("Slot2 Thread Start!");

Console.WriteLine("+++++++++Slot2+++++++!");

#endregion

Console.Read();

}

}

}

多线程编程一定要按照最成熟的方式来写,不然bug有你调的。另外每一行都要说的明白,但凡有一点自己说不清的,肯定会出问题。多线程bug调试,我主要是依靠分析代码逻辑找原因,比调试靠谱。每一行都问下自己,逻辑在这里重入了会发生什么。有个开玩笑的疗法,加入sleep 100ms,然后神奇的事情发生了,一个星期不再发生了,用这个延迟大法,拖着拖着bug就拖没了,还是公司就倒闭了,哈哈[呲牙]

linux创建线程之pthread_create

一、pthread_create函数

1、函数简介

  pthread_create是UNIX环境创建线程函数

2、头文件

  #include<pthread.h>

3、函数声明

  int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

4、返回值

  若成功则返回0,否则返回出错编号

5、参数

  第一个参数为指向线程标识符的指针。

  第二个参数用来设置线程属性。

  第三个参数是线程运行函数的地址。

  最后一个参数是运行函数的参数。

6、注意

  在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库。

二、pthread_join函数

1、函数简介

  函数pthread_join用来等待一个线程的结束。

2、函数原型为:

  extern int pthread_join __P (pthread_t __th, void **__thread_return);

3、参数

  第一个参数为被等待的线程标识符

  第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。

4、注意

    这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。如果执行成功,将返回0,如果失败则返回一个错误号。

#include<stdio.h>

#include<stdlib.h>

#include<pthread.h>

 

/* 声明结构体 */

struct member

{

  int num;

  char *name;

};

 

/* 定义线程pthread */

static void * pthread(void *arg)

{

  struct member *temp;

 

  /* 线程pthread开始运行 */

  printf("pthread start!\n");

 

  /* 令主线程继续执行 */

  sleep(2);

 

  /* 打印传入参数 */

  temp = (struct member *)arg;

  printf("member->num:%d\n",temp->num);

  printf("member->name:%s\n",temp->name);

 

  return NULL;

}

 

/* main函数 */

int main(int agrc,char* argv[])

{

  pthread_t tidp;

  struct member *b;

 

  /* 为结构体变量b赋值 */

  b = (struct member *)malloc(sizeof(struct member));

  b->num=1;

  b->name="mlq";

 

  /* 创建线程pthread */

  if ((pthread_create(&tidp, NULL, pthread, (void*)b)) == -1)

  {

    printf("create error!\n");

    return 1;

  }

 

  /* 令线程pthread先运行 */

  sleep(1);

 

  /* 线程pthread睡眠2s,此时main可以先执行 */

  printf("mian continue!\n");

 

  /* 等待线程pthread释放 */

  if (pthread_join(tidp, NULL))

  {

    printf("thread is not exit...\n");

    return -2;

  }

 

  return 0;

}

编译与执行结果

    编译与执行结果如下图所示,可以看到主线程main和线程pthread交替执行。也就是说是当我们创建了线程pthread之后,两个线程都在执行,证明创建成功。另外,可以看到创建线程pthread时候,传入的参数被正确打印。

【爱室丽将对床垫行业投资】

据美国媒体报道,家具巨头爱室丽将对床垫行业投资,大力发展批发和零售床垫。

这家垂直整合的床上用品制造商正在推行双管齐下的分销战略,加速其在爱室丽商店网络中销售Ashley Sleep系列,并向其越来越多的独立经销商批发其SierraSleep系列。

目前,这两条生产线的床上用品批发出货量正在接近5亿美元的大关。爱室丽现在的目标是成为年出货量达到10亿美元的床上用品生产商。爱室丽将对床垫行业投资 - 企业动态 - 万叶千家

面试官给我上了一节 Redis的由浅变深的讲解

Redis是单线程还是多线程

redis的工作线程有却仅有一条

6.x版本以后-io线程是多个线程

redis的原子性  lua   piple  等

epoll  多路复用器 不负责数据的读写;只是负责读写的事件;

redis 从epoll查看有无读取事件, 然后redis从内核 读取事件 这个操作时input 操作然后计算,返回结果 output输出 --一个客户端

piple 一个客户端的指令集合也是原子的

lua 执行脚本方式也是原子操作; 程序调用lua 脚本是原子的

redis 的   事务 VS  pilple

 事务的执行时机是原子的;失败就是失败其他的继续执行, 没有回滚, 所以在redis 上少使用事务 + redis的事务指令尽量少而快。

redis 6.0版本之后--- redis的工作线程+ io线程

多核的cpu redis的服务端  工作线程去通知 io多线程线程 去负责数据读取搬运 -- redis的工作线程去串行化去计算 -然后io多线程去输出;这样能极大提高了 redis对于数据的吞吐量。

 单线程 满足redis的串行  只不过IO 多线程 把输入/输出放到更多的多线程去并行  2

  1   时间变短

  2  更快

  3 更好的压榨cpu资源 网卡打满

结论: 客户端被读取的顺序不能被保证,在一个socket连接里必须是顺序的

redis存在线程安全的问题嘛? 为啥? 

 redis 单线程串行, redis可以保证内部串行, 外界业务的时候要自行保证顺序!

redis 遇到穿透,击穿 ,雪崩 吗?详细描述下

网路阔普图    client ----redis---mysql

 前提--数据库是架构的瓶颈--所以我们需要把有效的请求到达数据库,即便在前置环节中增加复杂度与成本 也在所难免。

穿透--- redis 没有这个数据,直接到mysql.. 

 方案一    第一 ----空key    第二 布隆过滤器  第三  在前置环节上 加锁- 锁一次db请求 换n 次

db请求

击穿: 热点key  瞬间过期 或者 从来没缓存的数据;突然有大量请求key ; 对应的击穿 ;数据库存在,大量并发, 并redis并没有缓存。

 方案一    1  设置过期时间 固定时间+ 随机秒数 

                2  锁

 

未知    1 不知道你的请求是否是并发;假设并发

并发的场景 -db的查询是有效请求

1 请求redis 肯定没有

2 大家抢占锁 枪上的 碰db O(1)

3 未抢到 sleep

4 抢上的更新redis, O(1)

5 sleep 回到第一步

如何避免redis 雪崩

key 的数量n ; 过期了;数据库有, redis 没有, 大量的并发请求

锁一定是一个 单节点的 必须由redis 提供

根据AKF 理论;每个key 必须是隔离的

wWw.Xtw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。

免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!

联系邮箱:773537036@qq.com

标签: 调用 方法 thread