Tag: 并发

完全取代ASP.Net的会话

ASP.Net会话对于传统的WebForms应用来说显得非常完美,但是它们对于现代的AJAX和MVC应用程序来说是一些严重的问题。 具体来说,只有3种方法可以访问ASP.Net提供程序: 锁定读写 (默认) – 会话从AcquireRequestState触发被锁定,直到ReleaseRequestState触发。 如果一次从浏览器发出3个请求,他们将在服务器上排队。 这是MVC 2中唯一的选择,但MVC 3允许… 非锁定只读 – 会话未锁定,但不能保存到。 这似乎是不可靠的 ,因为一些读取似乎再次锁定会话。 会话已禁用 – 任何尝试读取或写入会话都会引发异常。 但是,现代的MVC应用程序,我有很多AJAX事件同时发生 – 我不希望他们在服务器上的队列,但我希望他们能够写入会话。 我想要的是第四种模式: 脏读,最后写赢 我认为(乐于纠正)唯一的方法就是完全取代ASP.Net的会话。 我可以编写自己的提供程序 ,但ASP仍然会使用它支持的三种模式之一来调用它。 有什么办法让ASP.Net支持乐观并发? 这让我用一个基本上做同样事情的新类替换了所有对会话的调用,但是不锁 – 这是一个痛苦。 我希望尽可能多地保留当前会话的内容(在各种日志中最重要的会话ID),并尽可能少地替换代码。 有没有办法做到这一点? 理想情况下,我希望HttpContext.Current.Session指向我的新类,但没有ASP.Net锁定任何请求。 有没有人已经做过这样的事情? 看起来奇怪的是,在所有的AJAXey MVC应用程序中,这是ASP的一个新问题。

ConcurrentHashMap和Collections.synchronizedMap(Map)有什么区别?

我有一个地图是由多个线程同时修改。 Java API中似乎有三种不同的同步Map实现: Hashtable Collections.synchronizedMap(Map) ConcurrentHashMap 据我所知, Hashtable是一个旧的实现(扩展了过时的Dictionary类),后来为适应Map接口而进行了修改。 虽然它是同步的,但它似乎有严重的可扩展性问题 ,并且不鼓励新项目。 但是另外两个呢? Collections.synchronizedMap(Map)和ConcurrentHashMap s返回的Maps之间有什么区别? 哪一个适合哪种情况?

SELECT或INSERT在一个容易出现竞争条件的函数中?

我写了一个函数来创建一个简单的博客引擎的帖子: CREATE FUNCTION CreatePost(VARCHAR, TEXT, VARCHAR[]) RETURNS INTEGER AS $$ DECLARE InsertedPostId INTEGER; TagName VARCHAR; BEGIN INSERT INTO Posts (Title, Body) VALUES ($1, $2) RETURNING Id INTO InsertedPostId; FOREACH TagName IN ARRAY $3 LOOP DECLARE InsertedTagId INTEGER; BEGIN — I am concerned about this part. BEGIN INSERT INTO Tags (Name) VALUES (TagName) RETURNING Id INTO […]