✨个人主页:bitme👇✨当前专栏:JavaEE初阶👇✨每日一语:迷雾散尽后,天光大亮,我看清了远处的灯塔,奔走在漫漫时光中,褪去青涩,我终将成为我故事里的主角。目录🍓一.synchronized的特性🍑二.synchronized使用示例🍇三.Java标准库中的线程安全类 🍓一.synchronized的特性synchronized从字面意思上是“同步”指的是“互斥”。“同步”和“异步”在一起讨论又是不一样的意思 例如去餐馆吃饭同步:老板把饭做好,我在前台等着然后自己打包带走。(调用者自己来负责获取到调用结果)异步:老板把饭做好,我在椅子上做好等着老板端到我面前。(调用者自己不负责获取调用结
✨个人主页:bitme👇✨当前专栏:JavaEE初阶👇✨每日一语:迷雾散尽后,天光大亮,我看清了远处的灯塔,奔走在漫漫时光中,褪去青涩,我终将成为我故事里的主角。目录🍓一.synchronized的特性🍑二.synchronized使用示例🍇三.Java标准库中的线程安全类 🍓一.synchronized的特性synchronized从字面意思上是“同步”指的是“互斥”。“同步”和“异步”在一起讨论又是不一样的意思 例如去餐馆吃饭同步:老板把饭做好,我在前台等着然后自己打包带走。(调用者自己来负责获取到调用结果)异步:老板把饭做好,我在椅子上做好等着老板端到我面前。(调用者自己不负责获取调用结
概述 在验证调试过程中,如果有时候能在终端打印一些信息是非常有帮助的。 比如你在验证一个串口的环回模块,发送端每隔一段时间就会发送1个BYTE数据到接收端。如果你不想通过一个一个地比对波形来验证发送与接收是否一致的话,你可以选择将每一个发送的值和接收的值直接打印到终端。 又比如你的RTL中某个参数出现了一个不在预期范围内的值,你就可以在此时打印一条错误信息到终端,这样很快就可以知道RTL是否有问题,而不是双眼一直死死地盯着你的波形图。 Verilog语法给我们提供了4个系统函数,都可以在终端显示变量信息,根据其使用方法可以划分为3类:$d
概述 在验证调试过程中,如果有时候能在终端打印一些信息是非常有帮助的。 比如你在验证一个串口的环回模块,发送端每隔一段时间就会发送1个BYTE数据到接收端。如果你不想通过一个一个地比对波形来验证发送与接收是否一致的话,你可以选择将每一个发送的值和接收的值直接打印到终端。 又比如你的RTL中某个参数出现了一个不在预期范围内的值,你就可以在此时打印一条错误信息到终端,这样很快就可以知道RTL是否有问题,而不是双眼一直死死地盯着你的波形图。 Verilog语法给我们提供了4个系统函数,都可以在终端显示变量信息,根据其使用方法可以划分为3类:$d
说明 Monitor,直译为“监视器”,而操作系统领域一般翻译为“管程”。管程是指管理共享变量以及对共享变量操作的过程,让它们支持并发。在Java1.5之前,Java语言提供的唯一并发语言就是管程,Java1.5之后提供的SDK并发包也是以管程为基础的。除了Java之外,C/C++、C#等高级语言也都是支持管程的。synchronized关键字和wait()、notify()、notifyAll()这三个方法是Java中实现管程技术的组成部分。 MESA模型分析 在管程的发展史上,先后出现过三种不同的管程模型,分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA
说明 Monitor,直译为“监视器”,而操作系统领域一般翻译为“管程”。管程是指管理共享变量以及对共享变量操作的过程,让它们支持并发。在Java1.5之前,Java语言提供的唯一并发语言就是管程,Java1.5之后提供的SDK并发包也是以管程为基础的。除了Java之外,C/C++、C#等高级语言也都是支持管程的。synchronized关键字和wait()、notify()、notifyAll()这三个方法是Java中实现管程技术的组成部分。 MESA模型分析 在管程的发展史上,先后出现过三种不同的管程模型,分别是Hasen模型、Hoare模型和MESA模型。现在正在广泛使用的是MESA
背景:最近用mmdet的时候发现一个问题,在pipeline里进行一些随机操作(例如随机裁剪)的时候,设定一个随机种子randomseed,理论上每次随机操作的结果都不同,但是实际上发现会有2张图的操作结果是一样的。本来以为是batch_size的问题,就去修改了sampers_per_gpu。结果发现实际上是workers_per_gpu的问题。因此就来好好研究下这俩个参数的作用和意义。实际上科班的应该对进程比较熟悉,但是也考虑到有很多像我一样非科班的小白,可能对进程workers不是很理解,故此记录下,也欢迎大佬交流指正这俩个参数具体出现在configs文件里 sampers_per_gp
背景:最近用mmdet的时候发现一个问题,在pipeline里进行一些随机操作(例如随机裁剪)的时候,设定一个随机种子randomseed,理论上每次随机操作的结果都不同,但是实际上发现会有2张图的操作结果是一样的。本来以为是batch_size的问题,就去修改了sampers_per_gpu。结果发现实际上是workers_per_gpu的问题。因此就来好好研究下这俩个参数的作用和意义。实际上科班的应该对进程比较熟悉,但是也考虑到有很多像我一样非科班的小白,可能对进程workers不是很理解,故此记录下,也欢迎大佬交流指正这俩个参数具体出现在configs文件里 sampers_per_gp
前情概要随着容器和云技术的发展,大量的应用运行在云上的容器中,它们的好处是毋庸置疑的,例如极大的提高了我们的研发部署速度,快速的扩缩容等等,但是也存在一些小小的问题,例如难以调试.基于VM的部署我们可以通过安全的方式登录到主机上做一些你想做的事情,但是云上的容器那就是不太方便了(目前AWS的ECS已经有类似dockerexec的方式直接进入容器中了,其他的云未作了解).但是就算能进入容器也不意味着调试就好做了,通常来说使用的镜像都是经过优化和精简的(如果要调式可能需要安装大量的组件).所以,接下来介绍一下使用dotnet-monitor来内存转储(memorydump)运行在容器中的dotne
前情概要随着容器和云技术的发展,大量的应用运行在云上的容器中,它们的好处是毋庸置疑的,例如极大的提高了我们的研发部署速度,快速的扩缩容等等,但是也存在一些小小的问题,例如难以调试.基于VM的部署我们可以通过安全的方式登录到主机上做一些你想做的事情,但是云上的容器那就是不太方便了(目前AWS的ECS已经有类似dockerexec的方式直接进入容器中了,其他的云未作了解).但是就算能进入容器也不意味着调试就好做了,通常来说使用的镜像都是经过优化和精简的(如果要调式可能需要安装大量的组件).所以,接下来介绍一下使用dotnet-monitor来内存转储(memorydump)运行在容器中的dotne