精华内容
下载资源
问答
  • 然而,如果这两个字段恰好在同一个缓存行中,那么对这些字段的写操作会导致缓存行的写回,也就造成了实质上的共享。 这就是对象字段的虚共享问题(false sharing)。 Java8引入了一个新的注释 @

    写在前面

    本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

    本专栏目录结构和文献引用请见100个问题搞定Java虚拟机

    解答

    假设两个线程分别访问同一对象中不同的 volatile 字段,逻辑上它们并没有共享内容,因此不需要同步。然而,如果这两个字段恰好在同一个缓存行中,那么对这些字段的写操作会导致缓存行的写回,也就造成了实质上的共享。
    这就是对象字段的虚共享问题(false sharing)。
    Java8引入了一个新的注释 @Contended,可以用来解决对象字段之间的虚共享问题。
    

    补充

    @Contended

    Java 8引入了一个新的注释 @Contended,可以用来解决对象字段之间的虚共享问题。这个注释会影响到字段的排列。

    Java 虚拟机会让不同的 @Contended 字段处于独立的缓存行中,因此你会看到大量的空间被浪费掉。

    通过虚拟机选项 -XX:-RestrictContended控制。

    展开全文
  • 共享和资源共享的区别

    千次阅读 2018-12-09 08:42:29
    在这里所讨论的共享和资源共享,是计算机中的。 先说明一点, 共享,一般都是资源共享共享和资源共享,只是简称和全称的区别。 有人认为不同,可能只是因为不理解是从哪种角度来看这二者。 一般所说的...

    之前看到有人问,共享和资源共享区别很大?

    在这里所讨论的共享和资源共享,是指计算机中的。

    先说明一点,

    共享,一般都是指资源共享。

    共享和资源共享,只是简称和全称的区别。

    有人认为不同,可能只是因为不理解是从哪种角度来看这二者。

    一般所说的共享是指某种资源能被大家使用,并没有限定资源使用时间和地点。

    比如,图书馆的图书大家都可以阅览,但是这里对资源可以共享的一种陈述,说明了资源可以共享,并没有具体说明时间和地点。

    而计算机操作系统所说的资源共享既限定了资源使用时间又限定了地点。

    这里时间是指“进程在内存的期间”,地点是指“内存”。其实是隐含了这一说明。

    所以,我们现在很清楚它们之间的区别了。

    展开全文
  • Linux共享文件夹

    千次阅读 2019-02-18 17:59:00
    本文共享都是基于samba服务器已安装的情况。 一、Linux虚拟机右键对外共享 遇到的问题是 1)无法共享,提示需要在smb.conf文件中的[global]字段加入 usershare owner only = false  ...

    转载请注明出处:https://mp.csdn.net/postedit/87631960

    Linux虚拟机对外共享文件夹

    本文指的共享都是基于samba服务器已安装的情况。

    一、Linux虚拟机右键对外共享

    遇到的问题是 1)无法共享,提示需要在smb.conf文件中的[global]字段加入 usershare owner only = false

                           2)添加上之后可以共享了,但是需要输入用户名和密码,如果想去掉用户名和密码,需要再添加 

    browseable = yes  和  guest ok = yes,如果需要可读写再添加

    public = yes  和  writeable = yes。

     

    二、在smb.conf文件中配置共享目录

    范例:

    sudo vi /etc/samba/smb.conf

     

    [global]

    workgroup = linux_wfl

    netbios name = linux_wfl_1

    server string = linex_wfl Samba Server

    security = share

    usershare owner only = false  //添加这句后可以右键文件夹直接共享,但是需要用户名和密码

     

    comment = Public stuff

    public = yes

    writeable = yes

    browseable = yes

    guest ok = yes

     

    [share]

    comment = Public stuff

    path = /nfsroot/share

    public = yes

    writeable = yes

    browseable = yes

    guest ok = yes

     

    最后,为了使得配置生效,执行 sudo service smbd restart,重启samba服务器。

     

    至此,Linux虚拟机的共享介绍结束了。

    本作者能力有限,有误之处还盼指出。

     

    本人公众号二维码,本号是一个编程小百科,有算法、有网络、

    有IT界闲闻趣事、有编程路上的所思所想所感所悟、有他人的

    精彩分享,欢迎努力前行中的你关注。

     

    展开全文
  • 3G无线内部共享

    2013-05-02 17:25:27
    我这里的共享上网是的局域网内不使用专业的设备(路由器除外,当然两台互联的也是可以不用路由器的)、不使用局域网共享的第三方软件、不适应具有的多网卡的网络,而形成的局域网共享上网。这样做的目的是为了使...
  • Linux下共享内存编程(共享存储空间)

    万次阅读 多人点赞 2018-07-29 23:44:08
    共享存储允许两个或多个进程共享一个给定的存储区,是进程间通信最快的一种方式。 不要同时对共享存储空间进行写操作,通常,信号量用于同步共享存储访问。 最简单的共享内存的使用流程 ①ftok函数生成键值 ②...

    共享存储允许两个或多个进程共享一个给定的存储区,是进程间通信最快的一种方式。

    不要同时对共享存储空间进行写操作,通常,信号量用于同步共享存储访问。

    最简单的共享内存的使用流程

    ①ftok函数生成键值

    ②shmget函数创建共享内存空间

    ③shmat函数获取第一个可用共享内存空间的地址

    ④shmdt函数进行分离(对共享存储段操作结束时的步骤,并不是从系统中删除共享内存和结构)

    ⑤shmctl函数进行删除共享存储空间

    1.ftok函数生成键值

    每一个共享存储段都有一个对应的键值(key)相关联(消息队列、信号量也同样需要)。

    所需头文件:#include<sys/ipc.h>

    函数原型 :key_t ftok(const char *path ,int id);

    path为一个已存在的路径名

    id为0~255之间的一个数值,代表项目ID,自己取

    返回值:成功返回键值(相当于32位的int)。出错返回-1

    例如:key_t key = ftok( “/tmp”, 66);

    2.shmget函数创建共享存储空间并返回一个共享存储标识符

    所需头文件:#include<sys/shm.h>

    函数原型: int shmget(key_t key, size_t size,int flag);

    key为ftok生成的键值

    size为共享内存的长度,以字节为单位

    flag为所需要的操作和权限,可以用来创建一个共享存储空间并返回一个标识符或者获得一个共享标识符。

    flag的值为IPC_CREAT:如果不存在key值的共享存储空间,且权限不为0,则创建共享存储空间,并返回一个共享存储标识符。如果存在,则直接返回共享存储标识符。

    flag的值为 IPC_CREAT | IPC_EXCL:如果不存在key值的共享存储空间,且权限不为0,则创建共享存储空间,并返回一个共享存储标识符。如果存在,则产生错误。

    返回值:成功返回共享存储ID;出错返回-1

    例如:int id = shmget(key,4096,IPC_CREAT|IPC_EXCL|0666);创建一个大小为4096个字节的权限为0666(所有用户可读可写,具体查询linux权限相关内容)的共享存储空间,并返回一个整形共享存储标识符,如果key值已经存在有共享存储空间了,则出错返回-1。

         int id = shmget(key,4096,IPC_CREAT|0666);创建一个大小为4096个字节的权限为0666(所有用户可读可写,具体查询linux权限相关内容)的共享存储空间,并返回一个共享存储标识符,如果key值已经存在有共享存储空间了,则直接返回一个共享存储标识符。

    3.shmat函数获取第一个可用共享内存空间的地址

    所需头文件:#include<sys/shm.h>

    函数原型: void *shmat(int shmid, const void *addr, int flag);

    shmid为shmget生成的共享存储标识符

    addr指定共享内存出现在进程内存地址的什么位置,直接指定为NULL让内核自己决定一个合适的地址位置

    flag为对数据的操作,如果指定为SHM_RDONLY则以只读方式连接此段,其他值为读写方式连接此段。

    翻阅linux下shm.c文件得到#define SHM_RDONLY      010000  /* read-only access */

    返回值:成功返回指向共享存储段的指针;错误返回-1(打印出指针的值为全F)

    例如:char *addr  = shmat(id, NULL, 0);就会返回第一个可用的共享内存地址的指针的值给addr 

    4.shmdt函数进行分离

    当不需要对此共享内存进行操作时候,调用shmdt函数进行分离,不是删除此共享存储空间哟。

    所需头文件:#include<sys/shm.h>

    函数原型: int shmdt(const void *addr);

    addr为shmat函数返回的地址指针

    返回值:成功返回0;错误返回-1

    例如:int ret = shmdt(addr);

    5.shmctl函数对共享内存进行控制

    简单的操作就是删除共享存储空间了,也可以获取和改变共享内存的状态

    所需头文件:#include<sys/shm.h>

    函数原型:int shmctl(int shmid, int cmd, struct shmid_ds *buf);

    shmid就是shmget函数返回的共享存储标识符

    cmd有三个,常用删除共享内存的为IPC_RMID;IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中;IPC_SET:改变共享内存的状态,把buf所指的shmid_ds结构中的uid、gid、mode复制到共享内存的shmid_ds结构内。(内核为每个共享存储段维护着一个结构,结构名为shmid_ds,这里就不讲啦,里面存放着共享内存的大小,pid,存放时间等一些参数)

    buf就是结构体shmid_ds

    返回值:成功返回0;错误返回-1

    例如:int ret = shmctl(id, IPC_RMID,NULL);删除id号的共享存储空间

     

    ps:在Linux下,比如你申请24字节大小的共享存储空间,系统还是会默认给你分配一页的大小,但你还是只能使用这一页上24字节的空间。使用getconf PAGE_SIZE 命令就能显示出一页的大小

    使用ipcs -m可以查看当前系统所有的共享内存空间信息

    如果你的程序创建了一个共享内存段,但没有销毁,可以使用命令ipcrm -m shmid命令删除共享内存段,不然程序再运行有可能出错。

    下面用一个代码例子来使用共享内存

    我创建了一个结构体,想让结构体存入共享内存。写了两个程序,service和client,代码基本相同,不同就是service程序的开始创建共享内存。这两个程序是一个死循环,让你选择是存数据还是读数据还是销毁共享内存。代码写的不是很精致,主要是为了练共享内存,见谅哈。

    command.c文件,构造想存入的结构体,和共享内存的操作函数

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/types.h>
    #include<sys/shm.h>
    #include "Command.h"
    int sharememory(int ipc_size,int flag)
    {
    	int id;
    	key_t key=ftok("/tmp",66);
    	if(key < 0)
    	{
    		printf("get key error\n");
    		return -1;
    	}
    	id = shmget(key,ipc_size,flag);
    	if(id < 0)
    	{
    		printf("get id error\n");
    		return -1;
    	}
    	return id;
    }
    
    int create_ipc(int ipc_size)
    {
    	return sharememory(ipc_size,IPC_CREAT|IPC_EXCL|0666);
    }
    int get_ipc(int ipc_size)
    {
    	return sharememory(ipc_size,IPC_CREAT|0666);
    }
    int destroy_sharememory(int id)
    {
    	return shmctl(id,IPC_RMID,NULL);
    }

    command.h文件。好让service和client调用嘛,方便。

    #define NAME_LEN 20
    typedef struct {
    	char name[NAME_LEN];
    	int age;
    }ckx;
    int sharememory(int ipc_size,int flag);
    int create_ipc(int ipc_size);
    int get_ipc(int ipc_size);

    service.c文件。创建共享内存空间啦,读写等

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/shm.h>
    #include<sys/types.h>
    #include<stdlib.h>
    #include "Command.h"
    
    int main()
    {
    	int id=create_ipc(sizeof(ckx));
    	int i=0;
    	ckx *p;
    	if(id < 0)
    	{
    		printf("create sharememory error\n");
    		return 0;
    	}
    	id = 0;
    	while(1)
    	{
    		printf("\n\n1.input data to sharememory\n2.get sharememory data\n\
    3.destroy sharememory\ninput select:");
    		scanf("%d",&i);
    		if(i > 3 |i< 1)
    		{
    			printf("input error\n");
    			continue;
    		}
    		
    		id = get_ipc(sizeof(ckx));
    		if(id < 0)
    		{
    			printf("get sharememory error\n");
    			break;
    		}
    		p = (ckx *)shmat(id,NULL,0);
    		if(p < 0)
    		{
    			printf("get sharememory addr error\n");
    			p = NULL;
    			break;
    		}
    		
    		if(i == 1)
    		{
    			char name[NAME_LEN];
    			int age=0;
    			
    			printf("input name:");
    			fflush(stdin);
    			getchar();
    			gets(name);
    			printf("input age:");
    			scanf("%d",&age);
    			
    			strcpy(p->name,name);
    			p->age = age;
    			printf("write success\n");
    
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    			}
    			id = 0;
    		}
    		if(i ==  2)
    		{
    			printf("name:%s \t age:%d\n",p->name,p->age);
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			id = 0;
    		}
    		if(i == 3)
    		{
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			break;
    		}
    	}
    	if(id !=0)
    	{
    		if(destroy_sharememory(id)<0)
    		{
    			printf("destroy error\n");
    		}
    	}
    }
    

    client.c基本上就和service.c代码差不多啦,只是想体现共享内存嘛,service读写和client读写,观察现象,体现共享内存

    #include<stdio.h>
    #include<sys/shm.h>
    #include<stdlib.h>
    #include<string.h>
    #include<sys/types.h>
    #include<stdlib.h>
    #include "Command.h"
    
    int main()
    {
    	int i=0;
    	ckx *p;
    	int id = 0;
    	while(1)
    	{
    		printf("\n\n1.input data to sharememory\n2.get sharememory data\n\
    3.destroy sharememory\ninput select:");
    		scanf("%d",&i);
    		if(i > 3 |i< 1)
    		{
    			printf("input error\n");
    			continue;
    		}
    		
    		id = get_ipc(sizeof(ckx));
    		if(id < 0)
    		{
    			printf("get sharememory error\n");
    			break;
    		}
    		p = (ckx *)shmat(id,NULL,0);
    		if(p < 0)
    		{
    			printf("get sharememory addr error\n");
    			p = NULL;
    			break;
    		}
    		
    		if(i == 1)
    		{
    			char name[NAME_LEN];
    			int age=0;
    			fflush(stdin);
    			getchar();
    			printf("input name:");
    			gets(name);
    			printf("input age:");
    			scanf("%d",&age);
    			
    			strcpy(p->name,name);
    			p->age = age;
    			printf("write success\n");
    
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    			}
    			id = 0;
    		}
    		if(i ==  2)
    		{
    			printf("name:%s \t age:%d\n",p->name,p->age);
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			id = 0;
    		}
    		if(i == 3)
    		{
    			if(shmdt(p) == -1)
    			{
    				printf("shmdt error\n");
    				break;
    			}
    			break;
    		}
    	}
    	if(id !=0)
    	{
    		if(destroy_sharememory(id)<0)
    		{
    			printf("destroy error\n");
    		}
    	}
    	
    	
    }
    

     

    展开全文
  • session跨域共享

    千次阅读 2016-09-14 18:06:49
    这里所说的跨域,是跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下3个域名: www.vinceruan.info blog.vinceruan.info bbs.vinceruan.info 我要在这三个域名直接共享cookie或者共享session...
  • 共享内存

    千次阅读 2016-03-31 10:18:11
    共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。...
  • 一 : 关于Windows的默认共享介绍 网上其实到处都有谈论到,现我也只是整理一下: 在在Windows 系统中,在“我的电脑”上右击“管理”,依次选择“系统工具→共享文件夹→共享”,就会看到一些带有美元“$”标记的...
  • C语言 共享内存

    千次阅读 2014-03-08 21:32:54
    共享内存在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也可能要...
  • 共享单车、共享充电宝、共享雨伞,世间的共享有千万种,而我独爱共享内存。早期的共享内存,着重于强调把同一片内存,map到多个进程的虚拟地址空间(在相应进程找到一个VMA区域),以便于CPU...
  • 共享经济-共享汽车市场调研报告

    万次阅读 2018-08-17 16:00:23
    共享经济市场调研报告 ——共享汽车市场调研报告 目录   第一章 共享经济概况. 4 第一节 行业介绍. 4 第二节 共享经济发展历程. 5 第三节 两种模式下的生命周期. 6 第四节 行业市场竞争程度. 7 第二章 ...
  • 独占锁与共享

    千次阅读 2019-08-09 19:38:11
    独占锁与共享锁前言概念引入独占锁概念共享锁概念源码分析ReentrantReadWriteLock源码读锁和写锁的具体加锁方式有什么区别 ...独占锁也叫排他锁,是该锁一次只能被一个线程所持有。如果线程T对数据...
  • 1. 什么是动态频谱共享? 动态频谱共享(DSS,Dynamic Spectrum Sharing),就是允许4G LTE BBU和5G NR BBU共享相同的RRU和相同载波频谱,并将...动态频谱共享在同一频段内(Band)为不同制式的技术(比如4G...
  • 时分复用共享 时分复用是当多个程序或用户想要使用同一个资源时而采取的策略。每个程序或用户需要按照一定的顺序依次使用这个资源。 例子——CPU CPU的时间片就是时分复用的体现。多个程序在cpu中以一段时间间隔内...
  • 如何理解卷积神经网络中的权值共享

    万次阅读 多人点赞 2017-06-23 19:53:08
    权值共享这个词最开始其实是由LeNet5模型提出来,在1998年,LeCun发布了LeNet网络架构,就是下面这个: 虽然现在大多数的说法是2012年的AlexNet网络是深度学习的开端,但是CNN的开端最早其实可以追溯到LeNet5模型...
  • 1、会话共享应用背景 2、SpringCloud各个微服务 (SpringBoot)应用之间会话共享 2.1、启动类或者Redis配置类加入Redis会话共享注解 2.2、配置Redis基本配置内容 3、SpringCloud之中Feign调用微服务实现会话共享 ...
  • 搭建文件共享服务器

    千次阅读 2020-10-13 09:51:02
    目录前言需要准备的工作一、搭建文件共享服务器二、用户访问测试 前言 我们都知道ftp服务,一般学校在机房老师共享文件都是用的这个。 但是还有一个微软自带的一个协议也可以共享文件。以此来搭建一个文件共享服务器...
  • 原文地址: http://blog.csdn.net/tojohnonly/article/details/70246965共享内存 (也叫内存映射... 所谓的重叠是同一块内存区域可能被多个进程同时使用 , 当调用 CreateFileMapping 创建命名的内存映射文件对象时
  • Windows中的共享文件和文件服务器

    万次阅读 2018-10-17 11:59:02
    文件共享主动地在网络上共享自己的计算机文件。一般文件共享使用P2P模式,文件本身存在用户本人的个人电脑上。大多数参加文件共享的人也同时下载其他用户提供的共享文件。有时这两个行动是连在一起的。在很早期...
  • 共享内存实现原理

    万次阅读 2018-09-28 18:02:39
    共享内存的使用实现原理(必考必问,然后共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?) nmap函数要求内核创建一个新额虚拟存储器区域,最好是从地质start开始的一个...
  • 跨域共享cookie和跨域共享session

    万次阅读 2012-03-15 11:03:35
    这里所说的跨域,是跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下3个域名: www.vinceruan.info blog.vinceruan.info bbs.vinceruan.info 我要在这三个域名直接共享cookie或者共享session...
  • 如何实现打印机共享

    千次阅读 2018-01-20 20:02:31
    共享打印是打印机通过数据线连接某一台电脑(主机)设置共享后,局域网中的其他电脑(客户机)就可以使用此打印机。  共享打印和共享文件相同,是Windows系统提供的一项服务,配置共享打印需要两台电脑能够...
  • 的是我们数据中心的整体外部带宽的消耗。  4. 性能影响。每次HTTP请求和响应都带有Session数据,对Web服务器来说,在同样的处理情况下,响应的结果输出越少,支持的并发请求就越多。生成Session数据也会影响处理...
  • Linux 磁盘挂载共享与取消共享

    千次阅读 2019-08-11 18:55:04
    我们在架构或运维时会遇到如下情况, 1、本机磁盘不够用需要重新加载磁盘...Linux服务共享磁盘或目录(Linux挂载网络磁盘)是不错的解决方案。 1、登陆到web服务器 a) rpm -qa | grep nfs-utils ; rpm -qa | grep ...
  • windows中的文件共享(SMB服务)

    千次阅读 2020-01-17 20:12:25
    文件共享主动地在网络上共享自己的计算机文件。一般文件共享使用P2P模式,文件本身存在用户本人的个人电脑上。大多数参加文件共享的人也同时下载其他用户提供的共享文件。有时这两个行动是连在一起的。在很早期...
  • 破局共享汽车

    千次阅读 2021-04-10 15:55:14
    题目 破局共享汽车 自 2015 年以来,共享汽车行业曾经“百花齐放”,多个项目获得巨额融资。但因为模式过重、运营成本过高、无法盈利等问题,陆续有共享汽车公司因为资金链断裂而倒闭。据易观发布的《2019 中国共享...
  • linux创建共享目录

    千次阅读 2019-01-10 22:54:31
    一、服务端(ip:192.168.102.229) 1、yum install nfs-utils  yum install rpcbind 2、创建共享目录 ex:mkdir -p /data/share  chmod 777 /data/share .../data/share *(rw,sync) #* 允许所有...
  • windows 8 共享

    千次阅读 2012-10-30 11:02:55
    其实共享、设置以及前面我们提到的搜索都属于一种广义上的跨应用通信机制,在 Windows 8 中这种机制被称为 Contract 机制,所谓的 Contract,的是 Windows 中不同 “Metro”风格应用间的一种标准通信格式,发送...
  • 共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会...
  • 操作系统 文件共享

    千次阅读 2018-12-12 19:31:23
    文件共享当我们一个的文件被其他用户所访问,比如我们的windows操作系统,是多用户多任务的系统,允许 一台计算机注册多个用户来访问。比如windows7操作系统在开机的时候,有一个切换用户的按钮,当我们输入...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 602,259
精华内容 240,903
关键字:

共享指的是