最新文章

docker安装rocketmq

Name Server搭建 创建挂载的目录 创建一个新的网络连接

java使用信号量控制虚线程任务的并发数

/* 提交一个有并发控制的任务 通过 semaphore 信号量控制并发 * * @param taskName 任务名 相同任务名 做并发控制 * @param concurrent 并发数 * @param task * @return */

rust语言win10下编译兼容win7的可执行程序

笔者的一次经历,rust程序在win10上编译好了也可以运行,但拷贝到win7上就运行不了,多方研究发现是高版本的rust已经不支持win7了,所以就使用1.77.2这个版本来编译,然后就行了。

逻辑设计和硬件控制语言HCL

将很多的逻辑门组合成一个网,就能够构建计算块,称为组合电路。构建这些网有两条限制: - 两个或多个逻辑门的输出不能连在一起。否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障。 - 这个网必须是无环的。也就是在网中不能有路经过一系列的门而形成一个回路,这样的回路会导致该网络计算的函数有歧义。

理解指针

每个指针都对应一个类型,这个类型表明指针指向哪一类对象。特殊的void*类型代表通用指针。比如,malloc函数返回一个通用指针,然后通过显示强制类型转换或者复制操作那样的隐式强制类型转换,将他转成一个有类型的指针。

异质的数据结构

C语言的struct声明创建一个数据类型,将可能不同类型的对象聚合到一个对象中。结构中各个组成部分用名字来引用。类似于数组,结构的所有组成部分都存放在一段连续的区域内,而指向结构的指针就是结构第一个字节的地址。编译器维护关于每个结构类型的信息,指示每个字段(field)的字节偏移。它以这些偏移作为存储器引用指令中的位移,从而产生 对结构元素的引用。

程序的机器级表示-过程

一个过程调用包括将数据(以过程参数和返回追的形式)和控制从代码的一部分转移到另一部分。 A32程序用程序栈来支持过程调用。机器用栈来传递过程参数、返回信息、保存寄存器用于以后恢复,以及本地存储。为单个过程分配的那部分栈称为栈帧。

程序的机器级表示-控制

除了整数寄存器,CPU还维护着一组单个位的条件码(condition code)寄存器。常用的条件码有: - CF: 进位标志。最近的操作使最高位产生了进位。可以用来检查无符号操作数的溢出。 - ZF: 零标志。最近的操作得出的结果为0; - SF: 符号标志。最近的操作得到的结果为负数。 - OF: 溢出标志。最近的操作导致一个补码溢出(正溢出或负溢出)

算术和逻辑操作

加载有效地址(load effective address)指令leal实际上是movl指令的变形。 整数算术操作,加载有效地址(leal)指令通常用来执行简单的算术操作。

程序的及机器级表示-访问信息

大多数指令有一个或多个操作数,不同的操作数分为三种类型:- 立即数(immediate): 在AT&T格式汇编代码中,立即数书写是$后面跟一个整数,如:$-577或者$0x1F;

浮点数

二进制小数,二进制小数点左移一位相当于这个数被2除,小数点向右移一位相当于将该数乘2.

信息的表示

十六进制表示法 每台计算机都有一个字长(word size),指明整数和指针数据的标称大小。

java并发-线程间通信

ava支持多个线程同时访问一个对象或者对象的成员变量,由于每个线程可以拥有这个 变量的拷贝(虽然对象以及成员变量分配的内存是在共享内存中的,但是每个执行的线程还是 可以拥有一份拷贝,这样做的目的是加速程序的执行,这是现代多核处理器的一个显著特 性),所以程序在执行过程中,一个线程看到的变量并不一定是最新的。

java并发-线程的启动和终止

在运行线程之前首先要构造一个线程对象,线程对象在构造的时候需要提供线程所需要 的属性,如线程所属的线程组、线程优先级、是否是Daemon线程等信息。代码清单4-6所示的 代码摘自java.lang.Thread中对线程进行初始化的部分。

java并发-线程

现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作 系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局 部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉 到这些线程在同时执行。

双重检查锁定与延迟初始化

在Java多线程程序中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销。双 重检查锁定是常见的延迟初始化技术,但它是一个错误的用法。本文将分析双重检查锁定的 错误根源,以及两种线程安全的延迟初始化方案。

java并发-锁的内存语义

当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。 当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的 临界区代码必须从主内存中读取共享变量。

关于作者

程序员,软件工程师,java, golang, rust, c, python,vue, Springboot, mybatis, mysql,elasticsearch, docker, maven, gcc, linux, ubuntu, centos, axum,llm, paddlepaddle, onlyoffice,minio,银河麒麟,中科方德,rpm