树为什么能长这么高?

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DanielDingshengli/article/details/83752167

原文网址http://www.science4all.org/article/the-amazing-physics-of-water-in-trees/

水的高度

在这里插入图片描述

通过吸管吸水最多可以把水吸到10m的高度。树就像是一根吸管吸取土地里富含的水。
你用吸管喝饮料的时候其实是增加了肺部的体积,你的嘴巴和肺部的空气压强减小了。但是无论你怎么吸你都不能让水的压强超过大气压强,也就是形成负压强。

一种可能的猜想

在这里插入图片描述
吸水的时候像图上一样,一层层的吸。

渗透

在这里插入图片描述
中间是半透膜,只能让水分子通过,水分子会从浓度低的去往浓度高的,图上是从右往左

负压

要想把水吸上来,树的顶部和底部必须有压力差。我们可以增加底部的压力,而不是通过降低圆柱顶部的气压来吸水。这可以通过挤压液体来实现,就像你可以从容器中取出牙膏一样,
100米的树需要在底部形成10个标准大气压强,10个标准大气压强是巨大的压力,一般的容器根本吃不消。

水中其它的力

在这里插入图片描述
压力通常被认为是粒子碰撞的结果。这种效果是令人厌恶的。因此,与碰撞相关的压力总是正的。但是由于上面显示的液体的拉力具有压力的所有性质(除了推动),我们可以把它与压力联系起来,就像我们把渗透与渗透压联系起来一样。因为它是一个拉力而不是推力,所以它是负的。
负压意味着水分子互相吸收。更准确地说,压力越负,水分子吸收的就越多。通过在树顶有更多的负压,树设法从土壤中吸取水分到树叶中。
在这里插入图片描述
重力!基本上,树所做的就是在木质部管的顶部抓住水。然后重力把大部分的分子拉下来。只有少数分子留在树上,因此造成巨大的负压。在平衡状态下,压力的变化补偿了重力。这对应于每十米,气压下降一个大气压。
在这里插入图片描述
但是树木没有长出手去抓住水柱的顶部,是吗??
差不多,它们有毛细现象。

毛细现象

毛细管能力是一些液体在重力作用下爬上容器的能力。
当液体分子与容器分子之间的引力大于两个液体分子之间的引力时,液体分子就会爬升容器。当液体分子运动时,一些分子上升,发现自己被容器分子的引力所困。然后把其他液体分子拉上来。
在这里插入图片描述
水和水银的毛细现象演示
如果固体的表面是完全平坦的,那么容器对水分子的总引力将指向左边。但它的表面并不平坦,而且它的不规则性意味着,在某个位置,总引力确实指向上方,这就解释了水确实会爬升容器。
在这里插入图片描述
木质部的管子太大了,水升不了一米多。但在气孔的末端,在叶片上有大量极薄的气孔。这些孔称为细胞壁孔。虽然木质部管是20到200微米大,细胞壁孔隙是2到5纳米大。这几乎是分子的规模,意味着半月板的表面只有几百个分子!
毛细管吸水的高度与管的宽度成反比。
因此,这些孔隙可以承受比木质部管高出一万倍的水柱!因为木质部管可以吸1米高的水,所以孔隙可以吸几千米高的水!
在这里插入图片描述
在这里插入图片描述
因为一片树叶上有几十亿个小孔,而一棵树上有将近一百万片叶子,这就意味着一棵树上有几百万亿个微小的水气界面。
事实上,木质部管可以被认为是小管的结合,每个小管对应一个孔。
在这里插入图片描述

蒸腾作用

气孔可以关闭并保持平衡,也可以打开并让水柱与大气空气接触。然后蒸发发生,使一些水分子脱离水柱。
在液体中,分子以不同的速度运动。大多数都没有足够的速度与其他液体分子脱离引力。然而,在随机的碰撞序列之后,一些液体分子会达到足够快的速度来逃避引力。当它们与其他分子断开连接时,就会变成气相。
在这里插入图片描述

这和人类出汗有关吗?

因为快的分子最终会逃逸,只剩下慢的分子。由于温度与分子的平均速度有关,所以剩下的分子的温度会降低。因此,蒸腾作用可以冷却。
当树木出汗时,它们就失去了分子。因此气孔的分子密度减小。这就把压强降低到更负的状态。然后整个水柱就被吸进去了,这样水就能流到树上。换句话说,蒸腾作用是将树顶的水拉伸,使水向上流动的机制。

在这里插入图片描述

在这里插入图片描述

展开阅读全文

为什么fsockopen()执行时间需要这么长?

08-01

声明rn运行环境win2k+Apache2.0.47+PHP4.3.2rn我用的manual是最新版本rnrnrnint fsockopen ( string target, int port [, int errno [, string errstr [, float timeout]]])rn很郁闷的事,下面一段代码是我从manual里面拷贝过来的,我只修改了fsockopen最后那个参数为1(原文的是30),我甚至已经把php.ini中rndefault_socket_timeout设置为0(1我也试过)按照manual的解释,这个参数应该能够控制fsockopen连接超时的时间[Manual中如是说If you rnrnneed to set a timeout for reading/writing data over the socket, use socket_set_timeout(), as the timeout parameter to rnrnfsockopen() only applies while connecting the socket. ],可是下面的代码执行了将近20s后还是报错:(报错没什么,在前面加个@就ok rnrn了,可是怎么控制它连接的时间?太长了这也,曾经试过一个循环连接多个地址,反映时间基本上一样,这也能够说明一点什么问题)rnWarning: fsockopen(): php_network_getaddresses: gethostbyname failed in D:\Server\ftp.php on line 2rnWarning: fsockopen(): unable to connect to www.example.com:80 in D:\Server\ftp.php on line 2rnWarning: stream_set_timeout(): supplied argument is not a valid stream resource in D:\Server\ftp.php on line 3rn操作成功完成。 (0)rnrn\n";rn else rnfputs ($fp, "GET / HTTP/1.0\r\nHost: www.example.com\r\n\r\n");rnwhile (!feof($fp)) rnecho fgets ($fp,128);rnrnfclose ($fp);rnrn?>rn 论坛

这段访问代码有什么问题,为什么查询的执行时间这么长?

09-03

procedure TValidThread.Execute;rnvarrnUserName:string;rnUserPass:string;rnConnThread:Pointer;rnBuffSendData:Array[1..16] of char;rni,j:integer;rnAdoConn:TAdoConnection;rnAdoQry:TAdoQuery;rnUserValid:Boolean;rnbeginrn CoInitialize(NIL);rn AdoConn:=TAdoConnection.Create(NIL);rn AdoQry:=TAdoQuery.Create(NIL);rn AdoConn.ConnectionString:=frmvaliduser.StrConnect;rn AdoConn.LoginPrompt:=False;rn AdoConn.Connected:=True;rn AdoQry.Connection:=AdoConn;rn While frmvalidUser.idIsUserValid.Active dorn beginrn if DeQueue(MyQueue,UserName,Userpass,ConnThread) thenrn beginrn j:=GetTickCount();rn tryrn UserValid:=False;rn ZeroMemory(@BuffSendData,16);rn tryrn AdoQry.Active:=False;rn AdoQry.SQL.Clear;rn AdoQry.SQL.Add('Select * from userdata where 用户姓名='''+UserName+''''+' AND 用户密码='''+UserPass+'''');rn AdoQry.Active:=True;rn if AdoQry.isempty=False thenrn beginrn UserValid:=True;rn endrn elsern beginrn UserValid:=False;rn end;rn exceptrn end;rn j:=GetTickCount()-j;rn frmvaliduser.Label9.Caption:=inttostr(j);rn if UserValid thenrn beginrn tryrn BuffSendData[1]:='S';rn TIdPeerThread(ConnThread).Connection.WriteBuffer(BuffSendData,16,True);rn exceptrn end;rn endrn elsern beginrn tryrn BuffSendData[1]:='F';rn TIdPeerThread(ConnThread).Connection.WriteBuffer(BuffSendData,16,True);rn exceptrn end;rn end;rn finallyrn tryrn TIdPeerThread(ConnThread).Connection.Disconnect;rn exceptrn end;rn end;rn sleep(5);rn endrn elsern sleep(10);rn end;rn AdoQry.Close;rn AdoQry.Destroy;rn AdoConn.Close;rn AdoConn.Destroy;rn CoInitialize(NIL);rnend;rn这个线程里的数据库查询代码的执行过程明显比正常的查询过程慢,不明白为什么rn 论坛

大家会写这么长的SQL语句么???

11-10

不说语句质量及难易度。。rnrn我想知道大家遇到这钟情况一般怎么处理???rnrn是分到不同包含查询语句的函数里面还是像我这样一条语句写出来???rnrn这条语句查询出来的都是一个页面上的所以“页签”所包含的内容,最后拼接如下:rnrn[code=sql]SELECT WF_w_pc.XXXX,w_pc_ProjectId,ISNULL(WF_w_pc.w_pc_AnnualPlan,'') w_pc_AnnualPlan,w_pc_ProjectName,Dept_Name,ISNULL(WF_R_BI.YYYYName,'') w_pc_Nature,ISNULL(WF_R_BI2.YYYYName,'') w_pc_SOURCE ,w_pc_StartDate,w_pc_EndDate,ISNULL(WF_w_pc_AP.w_pc_AP_Plan,'') w_pc_AP_Plan rn,CASE WF_w_pc.w_pc_Status rn WHEN 10 THEN '草稿' rn WHEN 20 THEN '审核中' rn WHEN 30 THEN '完成' rn ELSE '' END rnAS w_pc_Status rn,w_pc_Backdrop,w_pc_MainContent,w_pc_TechLines,w_pc_ResultForm,w_pc_SocialBenefits,w_pc_EconomicBenefit,w_pc_TechBenefits,w_pc_CooperationForm,w_pc_CooperationByUnit rn,ISNULL(WF_w_pc_P.w_pc_P_UserName,'') w_pc_P_UserNamern,ISNULL(WF_w_pc_P.proHead,'') proHead rn,ISNULL(WF_w_pc_P.proArticipants,'') proArticipantsrnFROM WF_Research_ProjectCharter WF_w_pc rnLEFT JOIN WF_Research_PC_AnnualPlan WF_w_pc_AP rnON WF_w_pc.XXXX=WF_w_pc_AP.XXXX rnLEFT JOIN WF_Research_BasicInfo WF_R_BIrnON WF_w_pc.w_pc_Nature=WF_R_BI.YYYYID AND WF_R_BI.YYYYType=1 rnLEFT JOIN WF_Research_BasicInfo WF_R_BI2 rnON WF_w_pc.w_pc_Nature=WF_R_BI2.YYYYID AND WF_R_BI2.YYYYType=2 rnLEFT JOIN rn(SELECT XXXX,w_pc_P_UserName=(STUFF((SELECT ',' + w_pc_P_USERNAME FROM WF_Research_PC_Participate rnWHERE w_pc_P_Type=2 AND XXXX=pcp.XXXX FOR XML PATH('')),1,1,'')) rn,proHead=(STUFF((SELECT ',' + w_pc_P_USERNAME FROM WF_Research_PC_Participate rnWHERE w_pc_P_Type=3 AND XXXX=pcp.XXXX FOR XML PATH('')),1,1,'')) rn,proArticipants=(STUFF((SELECT ',' + w_pc_P_USERNAME FROM WF_Research_PC_Participate rnWHERE w_pc_P_Type<>3 AND XXXX=pcp.XXXX FOR XML PATH('')),1,1,'')) rnFROM WF_Research_PC_Participate pcp rnGROUP BY XXXX) AS WF_w_pc_P rnON WF_w_pc.XXXX=WF_w_pc_P.XXXX rnWHERE WF_w_pc.XXXX=@XXXX[/code] 论坛

没有更多推荐了,返回首页