April 13, 2009
伪命题: 中关村人平均寿命53岁
华西都市报原文,引用报道很多,引用其中一篇 IT精英猝死引热议 报告称中关村人平均寿命53岁。
证明其伪命题如下:
- 中关村的开发从1998年开始。引文 中关村历史回顾:从初创期到发展期
- 这个行业初创,老年人不会多。且估计98年的时候,往多了算,主力的人员算作平均年龄40岁吧。
- 这些人到现在平均年龄50岁。
- 的确有一些人50岁左右就死了,他们就是华西都市报的采样数据。
- 有没有活到60、70、80岁以上的人呢?肯定是有的,但是他们现在还没死。所以没有归纳到采样数据里。
哗众取宠。
村里的民工可以安心了。
Filed by
charlie
at 5:18 pm under Engineer, Life
No Comments
April 2, 2009
SQL Server CLR的进程和线程
结论
- SQL Server CLR是一个多线程运行的环境。
- 静态变量等线程安全问题,在CLR环境中存在。
摘录《Professional SQL Server™ 2005 CLR Programming》
SQL Server 2005 hosts the CLR in a “sandbox”-like environment in-process to itself, as you can see Figure 1-2. When a user requests a SQL CLR object for the first time, SQL Server will load the .NET execution engine mscoree.dll (which is the CLR) into memory.
实验
CLR代码
public partial class ProcessThread
{
public static int static_i=0;
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlString PID()
{
return Process.GetCurrentProcess().Id.ToString();
}
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlString TID()
{
return AppDomain.GetCurrentThreadId().ToString()+ ":"+
System.Threading.Thread.CurrentThread.ManagedThreadId.ToString();
}
[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true, IsPrecise = true)]
public static SqlString StaticI()
{
return (static_i++).ToString();
}
};
安装CLR的SQL代码
CREATE ASSEMBLY sqlclr_test FROM 'C:\SQLCLR\bin\Release\sqlclr.dll' WITH permission_set = UNSAFE; GO create function fn_processid () returns nvarchar(max) as external name sqlclr_test.ProcessThread.PID GO create function fn_threadid () returns nvarchar(max) as external name sqlclr_test.ProcessThread.TID GO create function fn_statici () returns nvarchar(max) as external name sqlclr_test.ProcessThread.StaticI GO
测试用查询命令
select
dbo.fn_processid() as [ProcessID],
dbo.fn_threadid() as [ThreadID],
dbo.fn_statici() as [StaticI]
返回结果
| ProcessID | ThreadID | StaticI |
| 1608 | 5820:4 | 11 |
系统进程截图 (Process Explorer)

现象
- 每次执行查询命令,得到的ThreadID会发生变化,在SQL Server的进程包含的线程池中轮转。
- 每次执行查询命令,不论是否同一个线程,StaticI的值会增加。
- SQL Server的用户进程(登录),与所执行的线程编号几乎没有关系。
Filed by
charlie
at 6:47 am under Coding, DBA
No Comments


