首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ASP.NET核心会话实现线程安全吗?

ASP.NET核心会话实现线程安全吗?
EN

Stack Overflow用户
提问于 2019-05-23 23:31:25
回答 1查看 955关注 0票数 1

我知道有一个类似的问题,但这是关于ASP.NET的,而不是ASP.NET核心的。答案是7-9岁,把ASP.NET和ASP.NET核心混为一谈可能不是个好主意。

我指的是线程安全在本例中:

在属于同一会话的多个请求中使用Session的读写方法(比如Session)(通过HttpContext访问,通过注入的IHttpContextAccessor访问)安全吗?

显然答案是肯定的,因为如果不安全,那么所有开发人员都应该使他们访问代码线程的会话安全.

我查看了源代码,它似乎是默认的(我在调试器中访问的会话是DistributedSession的一个实例),没有任何序列化或其他技术的痕迹,比如锁.即使是私人_store成员也是纯Dictionary.

对于并发修改的使用,这个线程如何是安全的?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-24 04:37:29

DistributedSession是由DistributedSessionStore (即注册为临时依赖项 )创建的。这意味着DistributedSessionStore本身是隐式安全的,因为它实际上不是在请求之间共享的。

会话使用字典作为基础数据源,该数据源也是DistributedSession对象的本地数据源。初始化会话时,会话在访问会话时惰性地初始化_store字典,方法是反序列化缓存中存储的数据。看上去像这样

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var data = _cache.Get(_sessionKey);
if (data != null)
{
    Deserialize(new MemoryStream(data));
}

所以这里对_cache的访问是一个单一的操作。同样的情况也适用于写入缓存

至于IDistributedCache实现,您通常可以期望它们是线程安全的,以允许并行访问。例如,MemoryCache使用作为备份存储的并发集合。

所有这些对于并发请求的意义基本上是,您不应该期望一个请求直接影响另一个请求的会话。会话通常只反序列化一次,因此在请求期间发生的更新(由其他请求进行)不会出现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56287806

复制
相关文章
ConcurrentHashMap线程安全吗?
没啥深入实践的理论系同学,在使用并发工具时,总是认为把HashMap改为ConcurrentHashMap,就完美解决并发了呀。或者使用写时复制的CopyOnWriteArrayList,性能更佳呀!技术言论虽然自由,但面对魔鬼面试官时,我们更在乎的是这些真的正确吗?整理了100+个Java项目视频+源码+笔记
程序员追风
2020/12/27
1.3K0
ConcurrentHashMap线程安全吗?
java中线程安全的容器_jfinal容器线程安全吗
Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。
全栈程序员站长
2022/10/02
7070
java中线程安全的容器_jfinal容器线程安全吗
哪些线程是安全的_redis是线程安全的吗
Java中平时用的最多的map就是hashmap但是它却是线程不安全的。 那除了hashmap还有哪些常见的线程安全的map? 1.hashtable Map<String,Object> hashtable=new Hashtable<String,Object>();
全栈程序员站长
2022/08/03
1.2K0
Servlet 是线程安全的吗?
概要 Servlet 默认是单例模式,在web 容器中只创建一个实例,所以多个线程同时访问servlet的时候,Servlet是线程不安全的。 那么 web 容器能为每个请求创建一个Servlet的实例吗?当然是可以的,只要Servlet实现SingleThreadModel接口,就可以了。 SingleThreadModel 该接口为每次请求创建一个servlet实例。此接口没有方法,跟Serializable接口一样只是一个标识接口。 注意,singlethreadmodel并不能解决所有的线程安全
java404
2018/05/18
2.7K0
密码安全与会话安全
对于登录大家并不陌生,访问系统几乎都需要登录。因为系统也不知道是谁在访问,所以需要你告诉系统你是谁,还需要证明你真的是你,如何证明?给系统展示你的密码,因为密码只有你才拥有,你有这个密码,你就能证明你真的是你,这就是一个登录。
ThoughtWorks
2021/09/15
1.3K0
文件和SOCKET跨线程安全吗?
将一个文件或SOCKET的句柄fd传递给多个线程,进行读、写和Close操作,是否安全了?答案是“否”,这类似于new一个指针后,这个指针传递给多线程是否安全,结果是常常容易造成一个线程使用已经被另一个线程delete的指针。
一见
2018/08/07
1.1K0
MySQL的Buffer Pool线程安全吗?
假设MySQL同时接收到了多个请求,他自然会用多线程处理,那这多线程就可能会同时访问BP,即同时操作里面的缓存页,同时操作一个free链表、flush链表、lru链表。现在多线程来并发的访问这个BP,此时他们都是在访问内存里的一些共享数据结构,如缓存页、各种链表,必要加锁,然后让一个线程先完成一系列操作,比如说加载数据页到缓存页,更新free、lru链表,然后释放锁,接着下个线程再执行操作。
JavaEdge
2022/02/06
5860
Java 有线程安全的 set 吗?
在多线程环境下,要使用线程安全的集合,比如,ConcurrentHashMap是线程安全的HashMap,CopyOnWriteArrayList是线程安全的ArrayList。
Vincent-yuan
2021/12/08
8650
hashmap线程安全吗 什么解决方案_hashtable为什么是线程安全
以JDK1.8的HashMap为例,引用作者: 一字马胡 所写文章中的一张图:
全栈程序员站长
2022/11/09
5210
hashmap线程安全吗 什么解决方案_hashtable为什么是线程安全
ThreadLocal实现线程安全 转
Spring通过各种模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。我们使用模板类访问底层数据,根据持久化技术的不同,模板类需要绑定数据连接或会话的资源。但这些资源本身是非线程安全的,也就是说它们不能在同一时刻被多个线程共享。虽然模板类通过资源池获取数据连接或会话,但资源池本身解决的是数据连接或会话的缓存问题,并非数据连接或会话的线程安全问题。  按照传统经验,如果某个对象是非线程安全的,在多线程环境下,对对象的访问必须采用synchronized进行线程同步。但模板类并未采用线程同步机制,因为线程同步会降低并发性,影响系统性能。此外,通过代码同步解决线程安全的挑战性很大,可能会增强好几倍的实现难度。那么模板类究竟仰仗何种魔法神功,可以在无须线程同步的情况下就化解线程安全的难题呢?答案就是ThreadLocal!  ThreadLocal在Spring中发挥着重要的作用,在管理request作用域的Bean、事务管理、任务调度、AOP等模块都出现了它们的身影,起着举足轻重的作用。
chinotan
2019/04/03
9090
ThreadLocal实现线程安全
                                                                            转
什么是线程安全,你真的了解吗?
记得今年3月份刚来杭州面试的时候,有一家公司的技术总监问了我这样一个问题,说你给我说说有哪些线程安全的类,我心里一想,呵呵,这我早都背好了,稀里哗啦说了一大堆,那你再来说说什么是线程安全,然后就GG了,说真的,我们整天说线程安全,但是你对什么是线程安全真的了解嘛?说真的,我之前真的是了解甚微,那么我们今天就来聊聊这个问题。
java思维导图
2019/11/04
6800
threadpoolmanager_threadlocal是线程安全的吗
在WEB开发中,为了减少页面等待时间提高用户体验,我们往往会把一些浪费时间的操作放到新线程中在后台运行。
全栈程序员站长
2022/11/08
4970
mybatis的MappedStatement是线程安全的吗
org/apache/ibatis/mapping/MappedStatement.java
code4it
2023/08/29
2510
jdk8 hashmap线程安全吗_Python中的线程
只要是对于集合有一定了解的一定都知道HashMap是线程不安全的,我们应该使用ConcurrentHashMap。但是为什么HashMap是线程不安全的呢,之前面试的时候也遇到到这样的问题,但是当时只停留在***知道是***的层面上,并没有深入理解***为什么是***。于是今天重温一个HashMap线程不安全的这个问题。
全栈程序员站长
2022/11/07
7750
jdk8 hashmap线程安全吗_Python中的线程
面试阿里被质问:ConcurrentHashMap线程安全吗
没啥深入实践的理论系同学,在使用并发工具时,总是认为把HashMap改为ConcurrentHashMap,就完美解决并发了呀。或者使用写时复制的CopyOnWriteArrayList,性能更佳呀!技术言论虽然自由,但面对魔鬼面试官时,我们更在乎的是这些真的正确吗?
乔戈里
2021/01/06
9590
面试阿里被质问:ConcurrentHashMap线程安全吗
mybatis的MappedStatement是线程安全的吗
org/apache/ibatis/mapping/MappedStatement.java
code4it
2023/08/31
2080
mybatis的MappedStatement是线程安全的吗
什么是线程安全,你真的了解吗?
我们整天说线程安全,但是你对什么是线程安全真的了解嘛?说真的,我之前真的是了解甚微,那么我们今天就来聊聊这个问题。
Java团长
2018/09/27
8800
什么是线程安全,你真的了解吗?
shared_ptr是线程安全的吗?
shared_ptr objects offer the same level of thread safety as built-in types
早起的鸟儿有虫吃
2020/07/02
11.1K0
shared_ptr是线程安全的吗?
什么是线程安全,你真的了解吗?
记得今年3月份刚来杭州面试的时候,有一家公司的技术总监问了我这样一个问题,说你给我说说有哪些线程安全的类,我心里一想,呵呵,这我早都背好了,稀里哗啦说了一大堆,那你再来说说什么是线程安全,然后就GG了,说真的,我们整天说线程安全,但是你对什么是线程安全真的了解嘛?说真的,我之前真的是了解甚微,那么我们今天就来聊聊这个问题。
用户1260737
2019/10/14
9780
什么是线程安全,你真的了解吗?
Hibernate中SessionFactory是线程安全的吗?Session是线程安全的吗(两个线程能够共享同一个Session吗)?
SessionFactory对应Hibernate的一个数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。对于应用程序,最好将SessionFactory通过单例模式进行封装以便于访问。Session是一个轻量级非线程安全的对象(线程间不能共享session),它表示与数据库进行交互的一个工作单元。Session是由SessionFactory创建的,在任务完成之后它会被关闭。Session是持久层服务对外提供的主要接口。Session会延迟获取数据库连接(也就是在需要的时候才会获取)。为了避免创建太多的session,可以使用ThreadLocal将session和当前线程绑定在一起,这样可以让同一个线程获得的总是同一个session。Hibernate 3中SessionFactory的getCurrentSession()方法就可以做到。
唐怀瑟
2018/08/30
1.8K0

相似问题

ASP.NET核心线程中的默认IServiceProvider安全吗?

19

asp.net核心rest api是线程安全的吗?

20

mule会话变量线程安全吗?

30

Oracle实现线程安全吗?

12

无状态会话线程安全吗?

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文