本文将为您提供关于php–Comet是如何工作的?如何写彗星聊天应用程序的人的详细介绍,同时,我们还将为您提供关于.net–Linq–它是如何工作的?、AtomicLong.lazySet是如何工作的
本文将为您提供关于php – Comet是如何工作的?如何写彗星聊天应用程序的人的详细介绍,同时,我们还将为您提供关于.net – Linq – 它是如何工作的?、AtomicLong.lazySet 是如何工作的?、c – 模板 – 它是如何工作的?、C++ 模板是如何工作的?的实用信息。
本文目录一览:- php – Comet是如何工作的?如何写彗星聊天应用程序的人
- .net – Linq – 它是如何工作的?
- AtomicLong.lazySet 是如何工作的?
- c – 模板 – 它是如何工作的?
- C++ 模板是如何工作的?
php – Comet是如何工作的?如何写彗星聊天应用程序的人
希望你能帮助我:)
解决方法
轮询将适用于常规站点,一旦您的应用程序达到大量流量,可伸缩性可能只会成为一个问题.
请原谅我的任何误解,你的问题没有这些细节.
.net – Linq – 它是如何工作的?
如果是这样,我认为我已经创建了一个非常类似的系统,因为有一个SiteContent模块,其中包含每个Manager类的实例 – 例如,有UserManager,ProductManager,SettingManager等. UserManager包含Users表中每行的User类的实例.它们还包含创建,更新和删除等方法.这些管理器及其“项目”是在每个页面加载时创建的.就我,开发人员而言,这使得在每个页面中访问用户,产品,设置等变得简单易行.我需要创建的任何后续页面,我只需要引用SiteContent.UserManager来访问用户列表,而不是从该页面内执行查询(即此方法将数据访问与页面的工作分开,在与使用后面的代码相同的方式将页面的工作方式与页面的布局方式分开.
然而问题是这种技术似乎相当慢.我的意思是它有效地在每个页面加载时创建一个数据库,从另一个数据库获取数据.我已经采取了一些措施,例如,如果在页面加载时未引用ProductManager,则会阻止创建它.因此,当不需要时,它不会将数据加载到存储中.
我的问题基本上是我的技术是否与Linq完全相同,意思是将表中的数据复制到类的属性中.
提前感谢您对此提出任何建议或解答.
问候,
理查德克拉克
解决方法
换句话说,当你写这个:
var product = context.Products.Where(p => p.ID == 50).SingleOrDefault();
它针对数据库执行此操作:
SELECT ID,Name,Foo,Bar,Baz,Blah,... FROM Products WHERE ProductID = 50
它不仅可以执行SELECT * FROM Products,还可以从结果中搜索特定产品.
如果您尝试在每个页面加载时“下载”整个数据库,那么您的应用程序确实会很慢.这绝对不是Linq to sql,Linq to Entities或任何其他ORM框架所做的.
AtomicLong.lazySet 是如何工作的?
Quora上有人提问AtomicLong.lazySet
是如何工作的?
Jackson Davis答道:
为一个AtomicLong对象设置一个值,jvm会确保其他线程读取到最新值,原子类和voliatile变量也是一样的,这是由依赖于硬件的系统指令(如x86的xchg)实现的。lazySet却是无法保证这一点的方法,所以其他线程在之后的一小段时间里还是可以读到旧的值。这有什么好处呢?性能:在多核处理器下,内存以及cpu缓存的读和写常常是顺序执行的,所以在多个cpu缓存之间同步一个内存值的代价是很昂贵的。
如何实现呢?大多数的原子类,比如AtomicLong本质上都是一个Unsafe和一个volatile Long变量的包装类。值得注意的是AtomicLong.lazySet方法实际是调用了本地方法Unsafe.putOrderedLong,本地方法Unsafe.putOrderedLong的实现可以参考http://hg.openjdk.java.net/jdk7/…。从Unsafe的代码中可以发现Unsafe_setOrderedLong是一个本地方法(c++实现),它仅调用了SET_FIELD_VOLATILE,这很是奇怪,我们期望共享的Unsafe_setLongVolatile拥有不同的语义。PS:在非增强版本中,setOrdered仅仅是调用了setVolatile方法,很是让人失望。深入查看你会发现其实他们是相同的,SET_FIELD_VOLATILE是一个OrderAccess:release_store_fence的包装。可以在Linux x86的代码http://hg.openjdk.java.net/jdk7/…中找到此方法的实现,在64bit x86系统中采用xchgq来代码,64位版本指令的问题我上面有提到过,上火。
ps:从理论上讲lazySet能比一个标准的volatile变量的写性能更好。但是我在openJdk里没有找到相关代码。
Felix Sulima补充道:
sun.misc.unsafe很多方法被jvm增强了,JIT(just in time运行时编译执行的技术)直接解释而忽略原始的实现。可以在这里找到这个例子:src/share/vm/classfile/vmSymbols.hpp@3facbb14e873列表中的native方法仅仅是非JIT环境下的一个备份的内部方法。例如,如果它没有被调用(我也不知道是什么原因),因此这些方法缺乏一些必要的优化。从Talk from JAX London的幻灯片11-12可以看到AtomicLong.lazySet(…)在x86系统上会被编译成“mov”指令。这里是Google Group里关于如何获得JIT装配的一个描述。
原文 How-does-AtomicLong-lazySet-work
翻译 孙文强
c – 模板 – 它是如何工作的?
template<typename> struct is_const{static const bool value = 0;};
这段代码将如何表现以及如何应用?我没有在互联网上找到任何例子或解释.
我想知道缺少参数名称(例如T).
解决方法
template <typename T> struct is_const<const T> {static const bool value = 1;};
这将允许您检查类型是否符合const限定:
static_assert(!is_const<int>::value,"wat"); static_assert(is_const<const int>::value,"wat");
C++ 模板是如何工作的?
C++ 模板:深入理解
简介
模板是 C++ 中强大的功能,它允许编写可重用的代码,而无需为每种数据类型重复相同的功能。本文将深入探讨 C++ 模板的工作原理,并通过实战案例展示其应用。
立即学习“C++免费学习笔记(深入)”;
模板基本语法
模板使用尖括号 编写,它指定模板参数。例如,下面是一个模板函数,用于交换两个任意类型的值:
template <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
实例化
当模板被调用时,模板参数被替换为特定的数据类型。这个过程称为实例化。例如,要为整数类型调用 swap 函数:
swap<int>(x, y);
模板特化
模板特化允许为特定数据类型提供不同的实现。例如,我们可以在 swap 函数中为 char 类型提供优化过的实现:
template <> void swap<char>(char& a, char& b) { char temp = a; a = b; b = temp; }
实战案例:插入排序
考虑一个使用模板的插入排序算法:
template <typename T> void insertionSort(T arr[], int n) { for (int i = 1; i < n; i++) { T key = arr[i]; int j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } }
这个算法利用 swap 模板函数进行值交换,并可以用于对任何数据类型的数组进行排序。
结论
C++ 模板提供了一个强大的机制,用于编写有效且可重用的代码。通过 understanding 模板的工作原理和通过实战案例,我们可以在各种应用程序中利用其优势。
以上就是C++ 模板是如何工作的?的详细内容,更多请关注php中文网其它相关文章!
关于php – Comet是如何工作的?如何写彗星聊天应用程序的人的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于.net – Linq – 它是如何工作的?、AtomicLong.lazySet 是如何工作的?、c – 模板 – 它是如何工作的?、C++ 模板是如何工作的?等相关知识的信息别忘了在本站进行查找喔。
本文标签: